java关于多态向上转换读书笔记

 直接上主菜:


package practice4;

public class A {
	int book=6;
	public void eat() {
		System.out.println("Animal 吃肉");
		
	}

}
class dog extends A{
	String book="book";
	public void eat() {
		System.out.println("狗吃肉");
	}
	public void say() {
		System.out.println("旺");
	}
	public dog() {
		System.out.println("2");
	}
	public dog(int a,int b) {
		System.out.println("1");
		
	}
}
class cat extends A{
	public void eat() {
		System.out.println("猫吃鱼");
	}
	public void say() {
		System.out.println("1");
	}
}
class testDemo{
	public static void main(String args[]) {
		A a=new dog();
		a.eat();
		//a.say();
		System.out.println(a.book);
		dog d=(dog) a;
		d.eat();
		d.say();
		System.out.println(d.book);
		a=new cat();
		cat q=(cat) a;}}
		

在testDemo类中,A a=new dog()使用了多态,声明的是父类A,实际引用的是子类dog,那么所造成的后果是创建的实例a引用的方法只能调用父类的方法(即是在A类中的方法,具体你可以查看会报错,原因出在a.say()语句,是由于A类中没有say方法所以报错),同样对于变量是一样的道理,输出a.book输出的是6,这就意味着调用的都是A类定义的不是实际引用的子类dog,如代码输出的那样。

多态的强制转换可以使用instanceof先验证对象是否是特定类的一个实例,再然后(type)转换。

 

第一次写,如有错误,欢迎指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值