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