java编程思想笔记--多态部分四

时间:2022-12-28 18:17:28
 

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