staticjava繼承
Ⅰ 關於java static 與繼承的執行順序
看完下面的代碼你就明白了……
class Test0 {
public static String staticField = "父類-靜態變數";
public String field = "父類-普通變數";
public Test0() {
System.out.println("父類-構造器");
}
static {
System.out.println(staticField);
System.out.println("父類-靜態初始化塊");
}
{
System.out.println(field);
System.out.println("父類-初始化塊");
}
}
public class Test1 extends Test0{
public static String staticField = "子類*靜態變數";
public String field = "子類*普通變數";
static {
System.out.println(staticField);
System.out.println("子類*靜態初始化塊");
}
{
System.out.println(field);
System.out.println("子類*初始化塊");
}
public Test1() {
System.out.println("子類*子類構造器");
}
public static void main(String args[]) {
System.out.println("main方法");
Test1 test1 = new Test1();
}
}
輸出結果為:
父類-靜態變數
父類-靜態初始化塊
子類*靜態變數
子類*靜態初始化塊
main方法
父類-普通變數
父類-初始化塊
父類-構造器
子類*普通變數
子類*初始化塊
子類*子類構造器
Ⅱ java中的靜態方法可以被繼承嗎
子類可以繼承父類的靜態方法
classFatherClass{
protectedstaticStringname;
protectedstaticvoidsetName(Stringname){
FatherClass.name=name;
}
}
//父類調用setName()方法
FatherClass.setName("fatherName");
{
}
//子類也可直接調用父類的setName()方法,說明子類可以繼承父類的靜態方法
SunClass.setName("sunName");
Ⅲ java中static類可以被繼承嗎
java中 被static修飾的 class 都是 內部類雹斗消。
static class 是可以被繼源知承的銷盯
Ⅳ java中父類有static修飾的方法其子類能繼承嗎
父類的靜態屬性的方法子類不能繼承,因為它從屬於類畝枯好鬧本身
你可迅襪洞以這樣理解:
A類:public static void main(String[] args)方法
B類:public static void main(String[] args)方法
B類繼承A類,如果可行的話,那就B類存在兩個程序入口,無法執行
靜態方法在類載入時就直接放到靜態方法區不能繼承
Ⅳ 關於Java 的繼承問題,子類會繼承父類的哪些東西
和C++類似,可以繼承基類的公共屬性和方法。
在Java繼承里,父類的屬性還有方法在聲明時,如果是public關鍵字即公共屬性,則在子類繼承時,這些屬性和方法都會被子類繼承。受保護的也可以繼承
但是私有的類屬性成員和方法則無法繼承。
.子類繼承父類的成員變數
當子類繼承了某個類之後,便可以使用父類中的成員變數,但是並不是完全繼承父類的所有成員變數。具體的原則如下:
1)能夠繼承父類的public和protected成員變數;不能夠繼承父類的private成員變數;
2)對於父類的包訪問許可權成員變數,如果子類和父類在同一個包下,則子類能夠繼承;否則,子類不能夠繼承;
3)對於子類可以繼承的父類成員變數,如果在子類中出現了同名稱的成員變數,則會發生隱藏現象,即子類的成員變數會屏蔽掉父類的同名成員變數。如果要在子類中訪問父類中同名成員變數,需要使用super關鍵字來進行引用。
2.子類繼承父類的方法
同樣地,子類也並不是完全繼承父類的所有方法。
1)能夠繼承父類的public和protected成員方法;不能夠繼承父類的private成員方法;
2)對於父類的包訪問許可權成員方法,如果子類和父類在同一個包下,則子類能夠繼承;否則,子類不能夠繼承;
3)對於子類可以繼承的父類成員方法,如果在子類中出現了同名稱的成員方法,則稱為覆蓋,即子類的成員方法會覆蓋掉父類的同名成員方法。如果要在子類中訪問父類中同名成員方法,需要使用super關鍵字來進行引用。
Ⅵ 繼承來的方法(在子類中)能使用static修飾嗎為什麼java
不能用static修飾。
原因:
抽象方法的最實質的意義在於被未來的子類覆蓋實現掉。本身是個空方法。private的實質意義在於本類其他方法調用它。本身是個空方法,別人調用無用,所以
abstract和private在一起毫無意義。final規定子類不能再覆蓋它。abstract是專等著要別人來覆蓋,二者矛盾。所以不能放在一起使用。
static的成員是在程序執行到main時就已經確定的。
動態方法調度就是指在運行時才決定執行哪個方法(是子類的還是父類的)衫答迅。比如運行時如
果用戶輸入自行車,就執行自行車的駕駛方法。
如果用戶輸入小轎車,就舉激執或此行小轎車的駕駛方法,涉及到用戶,這些都只能在運行時才能幹。
而abstract一定用到動態方法調度。所以這靜態和動態二者是矛盾的,不能一起用。因為道理是這樣,所以當時sun公司的設計者就這樣設計了。
Ⅶ JAVA:父類的static變數能被子類繼承嗎
可以,子類可以繼承父類的所有變數和方法,不管是不是static的,只有父類里private的屬性和方法不能在子類里直接使用,但是它照樣繼承,比如調用父類的set方法就可以為繼承來的私有變數賦值,可見私有的東西也可以繼承
Ⅷ Java中,static成員可以被繼承嗎
static成員可以被繼承,final定義的類不能有子類,方法不能被覆寫,變數即為常量,不能修改
Ⅸ java靜態方法能被繼承嗎原因
一,java中靜態屬性和靜態方法可以被繼承,但是沒有被重寫(overwrite)而是被隱藏.
二,原因:
1, 靜態方法和屬性是屬於類的,調用的時候直接通過類名;方法名完成對,不需要繼承機制即可以調用;
(1)如果子類裡面定義了靜態方法和屬性,則這時候父類的靜態方法或屬性稱之為"隱藏";
(2)如果你想要調用父類的靜態方法和屬性,直接通過父類名.方法或變數名完成,至於是否繼承,子類是有繼承靜態方法和屬性,但是跟實例方法和屬性不太一樣,存在"隱藏"的這種情況。;
2, 多態之所以能夠實現依賴於繼承、介面和重寫、重載(繼承和重寫最為關鍵),有了繼承和重寫就可以實現父類的引用指向不同子類的對象;
3,重寫的功能是:"重寫"後子類的優先順序要高於父類的優先順序,但是「隱藏」是沒有這個優先順序之分的。
4, 靜態屬性、靜態方法和非靜態的屬性都可以被繼承和隱藏而不能被重寫,因此不能實現多態,不能實現父類的引用可以指向不同子類的對象。
5,非靜態方法可以被繼承和重寫,因此可以實現多態。
Ⅹ Java static方法會被子類繼承嗎
父類中的static方法會被子類繼承,而且與可以通過父類名.方法名直接調用static方法一樣,可以通過子類名.方法名直接調用繼承的static方法
示例代碼如下: