Java 靜態方法在繼承時的表現
阿新 • • 發佈:2019-01-10
靜態方法在繼承時的情況
如果在父類定義了靜態方法,子類對父類進行繼承的時候,可以繼承靜態方法,但是在子類中表現為隱藏狀態。
靜態方法有兩種呼叫方式:
- 在使用 類名.靜態方法 呼叫的時候,直接呼叫的是各自類的靜態方法;
- 使用物件引用進行靜態方法呼叫時候,會呼叫該引用所屬類別的靜態方法;如果子類的引用且子類中沒有定義所呼叫的靜態方法,則會呼叫從父類繼承來的靜態方法(在子類中表現為引用)。
import java.io.IOException;
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的非靜態方法");
}
}
class B extends A{
// public static String statictaticStr= "B的靜態屬性" ;
public String nonstaticStr = "B的非靜態屬性" ;
// public static void staticMethod(){
// System.out.println("B的靜態方法");
// }
public void nonStaticMethod(){
System.out.println("B的非靜態方法");
}
}
class C extends A{
}
public class test1 {
public static void main(String[] args) throws IOException {
A a = new B();
System.out.println(a.staticStr);
System.out.println(a.nonstaticStr);
a.staticMethod();
a.nonStaticMethod();
System.out.println("####################" );
C c = new C();
System.out.println(c.staticStr);
System.out.println(c.nonstaticStr);
c.nonStaticMethod();
System.out.println("####################");
B b = new B();
System.out.println(b.staticStr);
System.out.println(b.nonstaticStr);
b.staticMethod();
b.nonStaticMethod();
}
}
/*
A的靜態屬性
A的非靜態屬性
A的靜態方法
B的非靜態方法
####################
A的靜態屬性
A的非靜態屬性
A的非靜態方法
####################
A的靜態屬性
B的非靜態屬性
A的靜態方法
B的非靜態方法
*/
import java.io.IOException;
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的非靜態方法");
}
}
class B extends A{
public static String statictaticStr= "B的靜態屬性" ;
public String nonstaticStr = "B的非靜態屬性" ;
public static void staticMethod(){
System.out.println("B的靜態方法");
}
public void nonStaticMethod(){
System.out.println("B的非靜態方法");
}
}
class C extends A{
}
public class test1 {
public static void main(String[] args) throws IOException {
A a = new B();
System.out.println(a.staticStr);
System.out.println(a.nonstaticStr);
a.staticMethod();
a.nonStaticMethod();
System.out.println("####################");
C c = new C();
System.out.println(c.staticStr);
System.out.println(c.nonstaticStr);
c.nonStaticMethod();
System.out.println("####################");
B b = new B();
System.out.println(b.staticStr);
System.out.println(b.nonstaticStr);
b.staticMethod();
b.nonStaticMethod();
}
}
/*
A的靜態屬性
A的非靜態屬性
A的靜態方法
B的非靜態方法
####################
A的靜態屬性
A的非靜態屬性
A的非靜態方法
####################
A的靜態屬性
B的非靜態屬性
B的靜態方法
B的非靜態方法
*/