1.在子类中的方法如果覆盖了父类的方法,它的返回值可以是父类的返回方法的返回类型的子类。例如:
package test; class R{ } class T extends R{ } class Father{ public R f(){ return new R(); } } public class p164 extends Father{ public T f(){ return new T(); } }
2.向下转型:
父类的子类可以*的进行向上转型,使用父类来代表子类,这是因为,父类不会大于子类的接口。但是,如果想将父类强转成子类,也就是进行向下转型,就有可能产生类转型异常,也就是ClassCastException.例如,以下代码中,如果作为父类的f想要转成子类的类型p164,如果是使用Useful test=new p167();这种方式来创建的,那么强转可以成功,而且可以调用子类中的父类没有的扩展方法。但是,如果就是一个父类的创建方式,Useful test=new Userful();那么这种港式不能强转为子类,会报出ClassCastException。不管是不是调用的子类中的父类没有的扩展方法,都会报错。
package test; class Useful{ public void f(){ System.out.println("father f()"); } public void g(){ System.out.println("father g()"); } } public class p167 extends Useful{ public void f(){ System.out.println("son f()"); } public void g(){ System.out.println("son g()"); } public void v(){ System.out.println("son v()"); } public static void main(String args[]){ Useful test=new p167(); ((p167)test).f(); } }