当前位置:编程学习 > JAVA >>

关于对象类型转换

有两个类Person,Chinese,其中Person继承Chinese,
假如在Mian方法中Person p=new Chinese();
问这个p对象属于哪个类的对象? --------------------编程问答-------------------- 应该说是与Person.

p对象可以调用Person的方法。 

但是不能调用子类, 也就是Chinese中没有继承Person定义的的新方法。 --------------------编程问答-------------------- Person p=new Chinese();

这句反过来的才是正确的吧 --------------------编程问答-------------------- 有两个类Person,Chinese,其中Person继承Chinese,
假如在Mian方法中Person p=new Chinese();
问这个p对象属于哪个类的对象?

p指向的是Chinese的,是向上转型,会丢失属性和方法,这样子 p不能访问Chinaese中的属性或方法,如果要访问的话需要强制转换,即向下转型,属于不安全的 --------------------编程问答--------------------
引用 3 楼  的回复:
有两个类Person,Chinese,其中Person继承Chinese,
假如在Mian方法中Person p=new Chinese();
问这个p对象属于哪个类的对象?

p指向的是Chinese的,是向上转型,会丢失属性和方法,这样子 p不能访问Chinaese中的属性或方法,如果要访问的话需要强制转换,即向下转型,属于不安全的
不强制转换,编译都通不过。 --------------------编程问答-------------------- p只是一个person类型的引用,指向一个Chinese对象
就好比一个身份证对应一个实际的人 --------------------编程问答-------------------- 逻辑都错了 --------------------编程问答-------------------- 大侠们:那到底P属于哪个类呢?
--------------------编程问答-------------------- 我也很郁闷,说P属于Person类吧?难道Chinese类不属于Person类吗?
--------------------编程问答-------------------- 逻辑错了,编译通不过..

 要 Chinese c = new person(); 因为Chinese才是父类..这样c指向person类,能够调用person内里继承自Chinese的方法和属性,但不能访问person类中独有的方法跟属性 --------------------编程问答-------------------- 三楼的您好:您说的有点道理,对象向上转型的话是可以的?
比如:Person p=new Chinese();编译不会报错,
如果:Person p1=new Person ();
Chinese c=(Person)p1;结果编译的时候就报错啦
ClassCastException对象强制类型转换出错


这是什么情况啊
--------------------编程问答-------------------- 10楼的您好:Chinese是子类,Person是父类 --------------------编程问答-------------------- 强转的时候要instanceof判断一下是否是父类的引用指向子类的对象.是的话才能转,不是转的话会抛类型转换异常
引用 10 楼  的回复:
三楼的您好:您说的有点道理,对象向上转型的话是可以的?
比如:Person p=new Chinese();编译不会报错,
如果:Person p1=new Person ();
Chinese c=(Person)p1;结果编译的时候就报错啦
ClassCastException对象强制类型转换出错


这是什么情况啊
--------------------编程问答-------------------- 恩恩额,我也知道... --------------------编程问答-------------------- Person p=new Chinese();
p对象当然指向的是一个Chinese的引用。就是说p指向的是一个Chinese对象,但是由于p是Person形式的引用,所以只能通过p访问它所引用对象中在Person类中定义的方法和属性。

使用 System.out.println(p instanceof Chinese);返回的是true --------------------编程问答-------------------- Person p=new Chinese();  这里很好理解啊, 因为Chinese继承了Person ,其实他也就在 Chinese里new出来了, 所以这里的 p 肯定是Person了撒,但是这里Chinese类可以重写方法 是会被调用的
补充:Java ,  Java EE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,