java转型 内存_java 对象转型内存分析

对象转型:

一个基类的引用类型变量可以指向其子类的对象(要求传个动物,传给狗是可以的,狗是动物)

一个基类的引用不可以访问其子类对象的新增成员(狗会游泳不代表所有的动物都会游泳,把狗当作动物来看时不可访问狗游泳方法)

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

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;

}

}main函数:

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(d instance of Animal); //true 狗是动物

System.out.println(a instanceof Dog); //False 动物是狗,显然逻辑错误,狗是动物,不能代表动物

a=new Dog("bigyellow","yellow"); //内存分析见下图1

System.out.println(a.name); //bigyellow

System.out.println(a.furname); //a是动物,new一个狗出来是把狗当作动物看,不可访问狗的特殊成员变量,上文第二条

System.out.println(a instanceof Dog); //true new出来的实际是Dog

//非要用a访问dog的成员变量,必须强制转换

Dog d1=(Dog)a; //内存分析见下图2

System.out.println(d1.furColor); //yellow

}

图1:狗当作普通animal,a只能看见animal共有的东西,看不见狗毛色属性

0818b9ca8b590ca3270a3433284dd417.png

图2:强制转换,定义一个d1=a,在内存中分配一块区间d1指向与a指向的相同的对象,d1是Dog类型的,所以可以看见dog的所有属性

0818b9ca8b590ca3270a3433284dd417.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值