对象转型及其在内存中的分析

引入

Java基础对于Java的深入学习相当重要。对于Java基础中的东西,在做了很多项目后,再回顾,对其便理解的十有八九了,今天来说说转型。

性质

对象转型有这么几点性质:

1、一个基类的引用类型变量可以“指向”其子类的对象;

2、一个基类的引用不可以访问其子类对象新增加的成员(属性和方法);

3、可以使用引用变量instanceof类名来判断该引用类型变量所“指向”的对象是否属于该类或该类的子类;

4、子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)。

demo

我们从代码的角度来理解一下以上四句话:

class Animal {
	public String name;
	Animal(String name) {
		this.name=name;
	}
}

class Cat extends Animal {
	public String eyesColor;
	Cat(String n,String c) {
		super(n); eyesColor = c;
	}
}

class Dog extends Animal {
	public String furColor;
	Dog(String n,String c) {
		super(n); furColor = c;
	}
}

public class  Test {
	public static void main(String args[]){
		Animal a = new Animal("name");
		Cat c = new Cat("catname","blue");
		Dog d = new Dog("dogname","black");
		
		System.out.println(a instanceof Animal); //true
		System.out.println(c instanceof Animal); //true
		System.out.println(d instanceof Animal); //true
		System.out.println(a instanceof Cat);  //false
		
		a = new Dog("bigyellow","yellow");
		System.out.println(a.name);  //bigyellow
		System.out.println(a.furname);  //!error
		System.out.println(a instanceof Animal);//true
		System.out.println(a instanceof Dog); //true
		Dog d1 = (Dog)a; //要加强制转换符
		System.out.println(d1.furColor); //yellow		
	}
}

性质说明

性质1:

a = new Dog("bigyellow","yellow");

性质2:

System.out.println(a.furname);  //!error
性质3:

System.out.println(a instanceof Animal); //true
System.out.println(c instanceof Animal); //true
System.out.println(d instanceof Animal); //true
System.out.println(a instanceof Cat);  //false
性质4:

向上转型:

a = new Dog("bigyellow","yellow");
向下转型:

Dog d1 = (Dog)a; //要加强制转换符

备注:左为堆,右为栈。

补充

在这里需要说明一点,向下转型的前提是要先向上转型,否则在执行的时候会出错(编译不会出错)。无论是访问属性还是方法输出的都是由实际指向的对象的属性和方法。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值