Java 父类类型作为方法的返回值实现多态

298 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

父类类型作为方法的返回值实现多态

abstract class LOVE{
	public abstract void love();
}
class one extends LOVE{
	public void love() {
		System.out.println("我喜欢你!");
	}
	
	//子类特有方法
	public void run() {
		System.out.println("999");
	}
	
}
class two extends LOVE{
	public void love() {
		System.out.println("我爱你!");	
	}
	
	//子类特有方法
	public void run() {
		System.out.println("666");
	}
}
class ME{
	public LOVE myLove(int n) {//58行
		if(n==1) {
			return new one();
		}else {
			return new two();
		}
	}
	public void RUN(LOVE m) {
		if(m instanceof one) {
			one l=(one)m;//向下转型
			l.run();
		}else if(m instanceof two) {
			two l=(two)m;
			l.run();
		}else {
			System.out.println("one不能转为two,判断一下");
		}
		//m.run();父类引用不能调用子类特有方法
	}
}
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		ME me=new ME();
		System.out.println("1.one 2.two");
		int n=in.nextInt();
		LOVE q=me.myLove(n);//返回的虽然是父类类型,但实际是子类对象
		q.love();
		me.RUN(q);
	}

}