向上向下类型转换

package com.qf.demo5;

import com.qf.demo4.Cat;

public class Test {

	public static void main(String[] args) {
		// 儿子顶着父亲的名字去唱戏
		Person p = new Son();
		// 让儿子去 卸妆  唱流行歌曲
		Son son = (Son) p; // 叫做向下转型
		
//		Person person = new Person();
//		Son son2 = (Son) person;
		
		//  向下转型有条件: 必须是父类的引用指向子类的实体的时候 才能向下转型
		
		
		Person person = new  SecondSon();
		// 二儿子想要跳舞 父类没有此功能   必须变回自己  才能由此功能
		SecondSon secondSon = (SecondSon) person;
		secondSon.dance();
		// 子类 想要  代替父亲唱戏 就必须向上转型
		// 向上转型的缺陷 就不能去使用自己特有的属性和方法 , 必须向下转型 才能调用自己特有的方法
		
		show(new Son());
		show(new SecondSon());
		
		
		//Person person2 = new Cat();// 向上转型是编译时期的错误
		
		
		
	}
	// 大儿子进来此方法   调用唱流行歌曲的方法
	// 二儿子进来   调用  跳舞的方法
	public static void show(Person person){
		person.Opera();
		// 判断传入的对象到底属于那一个类的对象
		// instanceof   判断左边的对象 是否属于右边的类
		if(person instanceof Son){
			Son son = (Son)person;
			son.singSong();
		}else {
			SecondSon son1 = (SecondSon)person;
			son1.dance();
		}
		
	}
	
	/**
	 *  向上转型   是  父类的引用 指向子类的对象   从而调高了代码的复用性
	 *  出现缺陷     父类的引用无法指向子类的特有的方法
	 *  向下转型    在向上转型的基础之上  在把父类的引用给子类的引用       
	 *  		格式:   子类类名   子类对象名 = (子类类名)父类引用;
	 *  
	 *  向上转型  向下转  都必须在继承关系当中
	 *  
	 *  多态: 一个事物具有多种表现形态
	 *  
	 *  多态可以编译时多态: 在编译过程中就能发现的多态
	 *  	     运行时多态:  再编译时期 检查不出来的多态  在运行时期才能看得出来的多态   比如  向下转型;
	 */
}

package com.qf.demo5;

public class Son extends Person{

	@Override
	public void Opera() {
		// TODO Auto-generated method stub
		System.out.println("儿子唱京剧");
	}
	
	public void singSong(){
		System.out.println("儿子唱流行歌曲");
	}
}

package com.qf.demo5;

public class SecondSon extends Person{

	@Override
	public void Opera() {
		// TODO Auto-generated method stub
		System.out.println("二儿子唱京剧");
	}
	
	public void  dance(){
		System.out.println("二儿子跳舞");
	}
}

package com.qf.demo5;

public class Person {

	public void  Opera(){
		System.out.println("唱京剧");
	}
	
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值