這是java多態的一個體現,若是一個類classA繼承了類classB,有實現了接口interfaceA,而且接口中有方法funA(),且父類classB中也有funA(),那麼對於classA來講既能夠重寫這個方法也能夠不重寫。java
父類:ide
public class MySuperClass { public int getData(){ return 100; } }
接口:測試
public interface MyInterface{ public int getData();//與父類重名的方法 public void todosomethings(); }
子類:spa
public class MyTest extends MySuperClass implements MyInterface{ public static void main(String[] args) { MyTest mt = new MyTest(); System.out.println(mt.getData()); MySuperClass msc = new MyTest(); System.out.println(msc.getData()); } @Override public void todosomethings() { // TODO Auto-generated method stub } @Override public int getData() { // TODO Auto-generated method stub return 10; } }
當繼承父類而且同時實現接口的時候會自動提示實現接口獨有的方法todosomethings(),並不提示要實現getData()方法,若是此時測試執行getData將會調用父類的方法。
若是選擇本身重寫getData方法,那麼就會執行本身重寫的方法。多態:父類引用指向了子類對象,如何理解這句話父類引用是"MySuperClass msc" 這句話定義了msc這個引用,code
可是它指向的的(=)倒是子類的對象 new Mytest(),所以棧空間裏的msc指向了堆空間裏的Mytest,當執行getData()方法的時候java的JVM會先找子類是否重寫了這個方法,若是沒有才會執行父類的方法。對象
所以執行的結果是:blog
10繼承
10接口