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);
}}

解决方案 »

  1.   

    我的理解是从子类中调用父类的方法可以直接用,但是从父类中调用子类的方法如果不转就会报异常,就像基本数据类型中int转long 是自动变换的,但是long转int就是要强转了,当new对象C时先去找父类的构造然后依次往下构造,所以先访问父类中的构造,父类中的方法是子类中实现的,就应该用子类去实现,所以用转换,这是我的理解不知道对不对?
      

  2.   

    你就记住this是指代当前对象的就可以了 所以Parent类下面的this 指代的是Parent实例化后的对象  该对象昂显然是Parent型的  然后利用强制装换  将该对象向下转为Child型  从而调用Child类的方法
      

  3.   

    我也不明白,你来一个
    Parent p =  new Parent();出异常了.你只是能new 子类了,那时候它的this不但代表了Parent本身对象,也代表了子类对象
      

  4.   

    (Child)this调用子类的对象,this代表当前类的对象,也就是Parent类的对象,你不强制转换成Child而直接用this.getX()或this.y肯定报错,因为Parent类中不存在getX()方法和y属性,所以必须强制转换成Child类型
      

  5.   

    Parent类中不存在getX()方法和y属性,所以必须强制转换成Child类型,前面的各位已经说得很好了!!