子クラスは親クラスのprivateメソッドを書き換えることができますか?
「privateはプライベートで、他のクラスはアクセスできません.サブクラスもアクセスできません.だから、親クラスのこの方法を再実現することができます.衝突はありませんが、再実現する方法は、書き換えもリロードも呼ばれません.このサブクラスの新しい方法です.サブクラスの一般的な拡張方法と同じです」
結果として、A B Bはjavaにおいてprivateの変数とメソッド対がクラス外では見えないことはもちろん書き換えとは言えないが、Bクラスでは親Aのprintメソッドを書き換えたように見えるが、親ではprivateであるため、BクラスのprintはAクラスのprintメソッドとは何の関係もなく、新しいメソッドと考えられる.不適切な例を挙げると、継承時に親メソッドが布団クラスに「見える」場合、親メソッドは直接copyから子クラスに移行したと想像できますが、子メソッドがこの親メソッドで実現したくない場合は、copyからのメソッドを上書きすることに相当し、どのように上書きしますか?メソッドの役割は、メソッドを呼び出すことによっても、いくつかの効果が得られたり、いくつかの値が得られたりします.この概念を書き換えると、サブクラスは親メソッドの効果や値を望んでいないので、修正したり、上書きしたりします.したがって、上書きはメソッドパラメータ、メソッド名、戻り値が親と同じでなければ上書きとはなりません.3つの要素のいずれかが一致しないと、上書きしたい方法とは異なる新しい方法が生成され、この新しい方法は現在のサブクラスに属し、上書きしたいと思っていたクラスも上書きされず、依然として存在することを想定する.(パラメータを変更した場合はリロードとなり、戻り値のみを変更した場合はエラーとなりますので、具体的にはリロードの内容を確認してください)このコードに戻り、親のメソッドはprivateで、つまり子クラスは「見えない」ので「copy」から子クラスには入れられないので書き換えのように見えますが、実際には子クラスに属する新しいメソッドです.ただ「ちょうどいい」と親のメソッドが重複しているだけです.マルチステートの要件を再検討すると、サブクラスが独自に追加したメソッドは、マルチステートの場合は使用できず、表示されないため、printメソッドを呼び出すと、コンパイラはサブクラスに親クラスのメソッドがないか、書き換えがないのを見て、親を呼び出すメソッドを選択します.親クラスのprivateを上位レベルの可視性に変更すると、子クラスは「見える」ことができ、「copy」が来て、B B B Bに出力されます.
public class A {
private void print() {
System.out.println("A");
}
public static void main(String[] args) {
A a = new B();
a.print();
B b = new B();
b.print();
new B().print();
}
}
class B extends A {
public void print() {
System.out.println("B");
}
}
結果として、A B Bはjavaにおいてprivateの変数とメソッド対がクラス外では見えないことはもちろん書き換えとは言えないが、Bクラスでは親Aのprintメソッドを書き換えたように見えるが、親ではprivateであるため、BクラスのprintはAクラスのprintメソッドとは何の関係もなく、新しいメソッドと考えられる.不適切な例を挙げると、継承時に親メソッドが布団クラスに「見える」場合、親メソッドは直接copyから子クラスに移行したと想像できますが、子メソッドがこの親メソッドで実現したくない場合は、copyからのメソッドを上書きすることに相当し、どのように上書きしますか?メソッドの役割は、メソッドを呼び出すことによっても、いくつかの効果が得られたり、いくつかの値が得られたりします.この概念を書き換えると、サブクラスは親メソッドの効果や値を望んでいないので、修正したり、上書きしたりします.したがって、上書きはメソッドパラメータ、メソッド名、戻り値が親と同じでなければ上書きとはなりません.3つの要素のいずれかが一致しないと、上書きしたい方法とは異なる新しい方法が生成され、この新しい方法は現在のサブクラスに属し、上書きしたいと思っていたクラスも上書きされず、依然として存在することを想定する.(パラメータを変更した場合はリロードとなり、戻り値のみを変更した場合はエラーとなりますので、具体的にはリロードの内容を確認してください)このコードに戻り、親のメソッドはprivateで、つまり子クラスは「見えない」ので「copy」から子クラスには入れられないので書き換えのように見えますが、実際には子クラスに属する新しいメソッドです.ただ「ちょうどいい」と親のメソッドが重複しているだけです.マルチステートの要件を再検討すると、サブクラスが独自に追加したメソッドは、マルチステートの場合は使用できず、表示されないため、printメソッドを呼び出すと、コンパイラはサブクラスに親クラスのメソッドがないか、書き換えがないのを見て、親を呼び出すメソッドを選択します.親クラスのprivateを上位レベルの可視性に変更すると、子クラスは「見える」ことができ、「copy」が来て、B B B Bに出力されます.