有一个不能理解的问题请教下大家

echoabs 2008-11-18 02:05:11

class Parent {
Parent(){
System.out.println("Parent:x="+((Child)this).getX());//请问这里的((Child)this)是调用的父类还是子类的对象,我觉得应该是调用子类的对象(我的依据:只创建了子类对象c),如果是调用子类的对象前面为什么还要加一个强制转换?
System.out.println("Parent:y="+((Child)this).y);
}

}
class Child extends Parent{
private int x=5;
public int getX(){
return x;
}
int y=-2;
}
public class Example {
public static void main(String[] args){
Child c=new Child();
System.out.println("x="+c.getX());
System.out.println("y="+c.y);
}

}
...全文
164 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
timeport 2008-11-18
  • 打赏
  • 举报
回复
DAY DAY UP !同意6楼
caojiang35072 2008-11-18
  • 打赏
  • 举报
回复
Parent类中不存在getX()方法和y属性,所以必须强制转换成Child类型,前面的各位已经说得很好了!!
leo_bogard 2008-11-18
  • 打赏
  • 举报
回复
同意6楼
jxxx2967 2008-11-18
  • 打赏
  • 举报
回复
DAY DAY UP !
echoabs 2008-11-18
  • 打赏
  • 举报
回复
明白了,谢谢大家了!!!
gloomy98 2008-11-18
  • 打赏
  • 举报
回复
楼上回答差不多了
gesanri 2008-11-18
  • 打赏
  • 举报
回复
(Child)this调用子类的对象,this代表当前类的对象,也就是Parent类的对象,你不强制转换成Child而直接用this.getX()或this.y肯定报错,因为Parent类中不存在getX()方法和y属性,所以必须强制转换成Child类型
MinThinking 2008-11-18
  • 打赏
  • 举报
回复
你调用的是子类的方法,如果不进行强制的向下转换,父类中并没有此方法,肯定会报错的,必须进行转换的。
zhangpeng9886123 2008-11-18
  • 打赏
  • 举报
回复
关注 学习了
awusoft 2008-11-18
  • 打赏
  • 举报
回复
我也不明白,你来一个
Parent p = new Parent();出异常了.

你只是能new 子类了,那时候它的this不但代表了Parent本身对象,也代表了子类对象
justinavril 2008-11-18
  • 打赏
  • 举报
回复
你就记住this是指代当前对象的就可以了 所以Parent类下面的this 指代的是Parent实例化后的对象 该对象昂显然是Parent型的 然后利用强制装换 将该对象向下转为Child型 从而调用Child类的方法
shanlingge 2008-11-18
  • 打赏
  • 举报
回复
我的理解是从子类中调用父类的方法可以直接用,但是从父类中调用子类的方法如果不转就会报异常,就像基本数据类型中int转long 是自动变换的,但是long转int就是要强转了,当new对象C时先去找父类的构造然后依次往下构造,所以先访问父类中的构造,父类中的方法是子类中实现的,就应该用子类去实现,所以用转换,这是我的理解不知道对不对?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧