首先需要知道的是,java中所有的public實例方法都默認是virtual的,static方法不是virtual的,所以static方法可以被覆蓋(new),但不可被重寫(override)
1.被繼承
父類:
public class Parents{ public static void staticFunction(){ System.out.println("public static function of parents"); } public void callPrintName(){ this.printName(); } }
子類:
1 public class Child extends Parents{ 2 public static void main(String[] args){ 3 Child child=new Child(); 4 child.staticFunction(); 5 } 6 7 }
輸出
public static function of parents
說明static方法可以被繼承
2.被覆蓋(new)
父類:
public class Parents{ public static void staticFunction(){ System.out.println("public static function of parents"); } public void callPrintName(){ this.printName(); } }
子類:
public class Child extends Parents{ public static void staticFunction(){ System.out.println("public static function of Child"); } public static void main(String[] args){ Child child=new Child(); child.staticFunction(); } }
輸出:
public static function of Child
上面輸出是public static function of Child,說明static已經被覆蓋(new)了
3.不是virtual,即不能實重寫(override)
//父類 public class Parents{ private void printName(){ System.out.println("private function of parents"); } public static void staticFunction(){ System.out.println("public static function of parents"); } public void callPrintName(){ this.printName(); } } //子類 public class Child extends Parents{ public static void staticFunction(){ System.out.println("public static function of Child"); } public static void main(String[] args){ Parents child=new Child(); child.staticFunction(); } }
輸出:
public static function of parents
上面的child是屬於Child實例,用Parents引用,輸出的是public static function of parents,說明static方法不是virtual的,不能被重寫(override)。