クラスが別のクラスを拡張すると、スーパークラスのすべてのメソッドと変数が継承されます。メソッドと変数の両方をサブクラスで異なる方法で使用できます。これは、同じシグネチャを使用してサブクラスで異なる方法で定義する場合です。現在、Oracle は上書きと非表示を区別しています (http://docs.oracle.com/javase/tutorial/java/IandI/override.html)。インスタンス メソッドはそのスーパークラスのメソッドを上書きし、クラス メソッドはそれを隠します。「隠蔽とオーバーライドの違いには重要な意味があります。呼び出されるオーバーライドされたメソッドのバージョンは、サブクラスのものです。呼び出される隠しメソッドのバージョンは、それがスーパークラスから呼び出されるかサブクラスから呼び出されるかによって異なります。」
Yes と Maybe の 2 つのクラスがあるとします。はい、たぶん伸びます。多分文字列 a を持っています。
class Maybe {
String a;
public static void printOut() {
System.out.println("Maybe");
}
public void printAndSet() {
a = "Maybe";
System.out.println(a);
}
}
class Yes extends Maybe {
public static void printOut() {
System.out.println("Yes");
}
pubilc void printAndSet() {
a = "Yes";
}
}
class Print{
public static void mail(String[] args) {
Maybe m = new Maybe();
Yes y = new Yes();
Maybe.printOut();
Yes.printOut();
m.printAndSet();
y.printAndSet();
}
そして私は言います:それはおそらくはい多分はい印刷されます
しかし、Oracle の記事を読んだ後、印刷する必要があると思いました。
yes
yes
maybe
yes
インスタンス メソッドがそのスーパークラス メソッドを上書きするためです。
私は出力に正しいと確信していますが、オラクルの方がよく知っているので、記事を理解していなかっただけだと思います. スーパークラスのオブジェクトからインスタンス メソッドを呼び出すと、上書きされたメソッドが使用されるということはあり得ません。上書きと非表示を区別する理由がわかりません!誰か助けてくれませんか?
編集; クラスを説明する代わりにコードを挿入しました!