每日学习-Java基础(十)接口和继承2(对象转型)

引用知识点:
https://blog.csdn.net/weixin_41117393/article/details/103522415
一、子类转父类
// 向上转换,是可以的

package ia2_objectChange;

// 对象转型
public class ObjectChange {

	public static void main(String[] args) {
		// 1-子类转父类 向上 可以转
		Hero h = new Hero();
		ADHero ad = new ADHero();
		h = ad; // 子类转父类,可以转 ,物理攻击英雄当作英雄使用
		// h -> Hero对象
		//   ↘
		//     ↘
		// ad -> ADHero对象
	}
}

二、父类转子类
// 向下转换,是不确定的

package ia2_objectChange;

public class ObjectChange2 {

	public static void main(String[] args) {
		Hero h = new Hero();
		ADHero ad = new ADHero();
		h = ad;
		
		// 2-父类转子类,向上,强转类型转换,有时可以,有时不可以
		// 2-1 可以强转
		ad = (ADHero) h; // 父类转子类,强转
		// h引用指向ADHero对象,ADHero转换成ADHero,可以转
		
		// 2-2 不可强转
		Support s = new Support();
		h = s; // 子类转父类,可以转,辅助类英雄当作英雄使用
		ad = (ADHero) h; // 编译报错,ClassCastException 类转换异常
		// 辅助类英雄当作物理攻击英雄来使用,行不通
	}
}

三、实现类转接口
// 向上转换,是可以的

package ia2_objectChange;

public class ObjectChange3 {

	public static void main(String[] args) {
		// 3-实现类转接口,向上,可以转
		ADHero ad = new ADHero();
		AD adi = ad; // 实现类转接口,可以转 
		// ADHero类实现接口AD,提供了AD接口中的物理攻击方法
		adi.phsyicAttack(); // 物理攻击
	}
}

四、接口转实现类
// 向下转换,是不确定的

package ia2_objectChange;

public class ObjectChange4 {

	public static void main(String[] args) {
		// 4-接口转实现类,强转,有时可以,有时不可以
		//
		ADHero ad = new ADHero();
		AD adi = ad;
		// 4-1 可以强转
		ADHero adHero = (ADHero) adi;
		// adi引用指向ADHero,可以转换
		
		// 4-2 不可强转
		ADAPHero adap = (ADAPHero) adi; // 报错,ClassCastException,类转换异常
		// 接口AD不能转换成实现类ADAPHero
		
		// adi引用指向ADHero,ADHero转换成ADAPHero,意味着可以调用魔法攻击方法magicAttack()
		// 但ADHero并没有魔法调用方法,ADHero不能转换成ADAPHero
	}

}

五、没有继承关系进行转换,肯定会失败

package ia2_objectChange;

public class ObjectChange5 {

	public static void main(String[] args) {
		// 5-无继承关系进行类型转换
		ADHero ad = new ADHero();
		APHero ap = new APHero();
		//ad = (ADHero)ap; // 报错,没有继承关系的两个类进行类型转换一定会失败
	}

}

六、instanceof

package ia2_objectChange;

public class InstanceofTest {

	public static void main(String[] args) {
		// 6-扩展 instanceof,判断一个引用指向的对象是否是该类或其子类
		Hero h = new Hero();
		ADHero ad = new ADHero();
		h = ad;
		System.out.println(h instanceof Hero); // true
		System.err.println(h instanceof ADHero); // true
	}

}

七、练一练
// 是不是相同的效果呢?

package ia2_objectChange;

public class ObjectChange6 {

	public static void main(String[] args) {
		// 7-练习
		Hero h = new Hero();
		AD adi = (AD) h; // 报错,ClassCastException,类转换异常
		// Hero不能转换成接口AD,Hero未实现接口AD
		ADHero ad = (ADHero) adi;
	}
}

我的学习源泉:https://how2j.cn/k/interface-inheritance/interface-inheritance-casting/308.html?p=114999
Java自学网站:https://how2j.cn?p=114999

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值