首頁 >Java >Java基礎 >java中的靜態方法可以被繼承麼

java中的靜態方法可以被繼承麼

王林
王林原創
2019-11-22 14:11:534584瀏覽

java中的靜態方法可以被繼承麼

#結論:java中靜態屬性和靜態方法可以被繼承,但是沒有被重寫(overwrite)而是被隱藏。

原因:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn