結論: Java の静的プロパティと静的メソッドは継承できますが、上書きされずに隠蔽されます。
理由:
1. 静的メソッドとプロパティはクラスに属しており、呼び出し時には、必要なく、クラス名.メソッド名を通じて直接完了されます。継承メカニズムのために呼び出すことができます。
静的メソッドと静的属性がサブクラスで定義されている場合、親クラスの静的メソッドまたは静的属性は、この時点では「非表示」と呼ばれます。親クラスの静的メソッドやプロパティを呼び出したい場合は、親クラス名.メソッドまたは変数名を直接使用できます。継承するかどうかについては、サブクラスは静的メソッドを継承できます。メソッドやプロパティは存在しますが、インスタンスのメソッドやプロパティとは異なり、「非表示」のような状況があります。
2. ポリモーフィズムが実現できる理由は、継承、インターフェイスと書き換え、およびオーバーロードに依存します (継承と書き換えが最も重要です)。継承とオーバーライドを使用すると、親クラスからの参照が異なるサブクラスのオブジェクトを指すことができます。
書き換えの機能は、「書き換え」後はサブクラスの優先度が親クラスの優先度よりも高くなりますが、「非表示」にはこの優先度がありません。
例は次のとおりです:
package com.study.test; public class A { //父类 public static String staticStr = "A静态属性"; public String nonStaticStr = "A非静态属性"; public static void staticMethod(){ System.out.println("A静态方法"); } public void nonStaticMethod(){ System.out.println("A非静态方法"); } }
package com.study.test; public class B extends A{//子类B public static String staticStr = "B改写后的静态属性"; public String nonStaticStr = "B改写后的非静态属性"; public static void staticMethod(){ System.out.println("B改写后的静态方法"); } }
package com.study.test; public class C extends A{//子类C继承A中的所有属性和方法 }
package com.study.test; public class StaticExtendsTest { public static void main(String[] args) { C c = new C(); System.out.println(c.nonStaticStr); System.out.println(c.staticStr); c.staticMethod();//输出的结果都是父类中的非静态属性、静态属性和静态方法,推出静态属性和静态方法可以 被继承 System.out.println("-------------------------------"); A c1 = new C(); System.out.println(c1.nonStaticStr); System.out.println(c1.staticStr); c1.staticMethod();//结果同上,输出的结果都是父类中的非静态属性、静态属性和静态方法,推出静态属性和 静态方法可以被继承 System.out.println("-------------------------------"); B b = new B(); System.out.println(b.nonStaticStr); System.out.println(b.staticStr); b.staticMethod(); System.out.println("-------------------------------"); A b1 = new B(); System.out.println(b1.nonStaticStr); System.out.println(b1.staticStr); b1.staticMethod();//结果都是父类的静态方法,说明静态方法不可以被重写,不能实现多态 } }
推奨チュートリアル: javaクイック スタート
以上がJavaの静的メソッドは継承できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。