Java关于向上转型与向下转型的区别

向上转型和向下转型

对象既可作为它本身的类型使用,也可作为它的基类型使用,通过类型转换(转型)来实现,对象的类型转换分两种,把对某个对象的引用视为对其基类型的引用的做法称为“向上转型”,反之则称为“向下转型

  1. 向上转型对象不能操作子类新增的成员属性和方法(失掉了这部分功能)
  2. 向上转型对象可以操作子类继承或隐藏的成员变量,也可以使用子类继承或重写的方法
  3. 可以将向上转型对象再强制转换到它本来的类型(向下转型),该对象就又具备了其所有的属性和方法
  4. 向上转型对象操作子类继承或重写的方法时,就是通知对应的子类对象去调用这些方法
package inter;

public class SuperClass {

	private int x;
	public SuperClass(int x) {
		this.x = x;
		System.out.println("父类构造方法");
		// TODO Auto-generated constructor stub
	}
	public void printInfo() {
		System.out.println("父类方法:"+this.x);
	}
	public static void main(String[] args) {
//		向上转型,把创建的子类对象赋给父类的引用
		SuperClass p = new ChildClass(10);
		p.printInfo();
//		向上转型后,子类中存在但父类中不存在的方法无法使用
//		p.display();
//		向下转型,把父类的引用强制还原为子类的引用
		ChildClass p2 = (ChildClass)p;
		p2.display();
//		instanceof判断实例对象是否属于某个类
		System.out.println(p instanceof SuperClass);
//		true
		System.out.println(p2 instanceof ChildClass);
//		true
		SuperClass p3 = new SuperClass(10);
//		父类对象p3不是子类的实例
		System.out.println(p3 instanceof ChildClass);
//		false
		
//		创建父类的对象不能转换为子类,以下用法错误
//		ChildClass p4 = (ChildClass)p3;
		
		ChildClass p4 = new ChildClass(20);
		p4.display();
//		子类对象属于父类
		System.out.println(p4 instanceof SuperClass);
//		true
		
	}

}
class ChildClass extends SuperClass{
	private int x;
	ChildClass(int x){
		super(x);
		this.x = x;
		System.out.println("子类构造方法");
	}
	public void display() {
		System.out.println("子类方法:"+this.x);
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值