java父類與接口有相同的方法


  這是java多態的一個體現,如果一個類classA繼承了類classB,有實現了接口interfaceA,並且接口中有方法funA(),且父類classB中也有funA(),那么對於classA來說既可以重寫這個方法也可以不重寫。

父類:

public class MySuperClass {
    public int getData(){
        return 100;
    }
}

接口:

public interface MyInterface{
    public int getData();//與父類重名的方法
    public void todosomethings();
}

子類:

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這個引用,

但是它指向的的(=)卻是子類的對象 new Mytest(),因此棧空間里的msc指向了堆空間里的Mytest,當執行getData()方法的時候java的JVM會先找子類是否重寫了這個方法,如果沒有才會執行父類的方法。

因此執行的結果是:

10

10

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM