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();
}
}