这是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接口