public class Covariant { public static void main(String[] args){
Covariant c=new Covariant();
System.out.println(c.getObject().x);
}

public A getObject(){
return new A();
}

class subConariant extends Covariant{  
public B getObject{  //在这里会报错
return new B();  
}
}
}class A {
int x=5;
}class B extends A{
int x=6;
}
我的理解是:subConariant是一个内部类,所以他不可以访问没有定义在Conariant中的对象,比如class B。
我的问题是:如何写一个内部类,可以得到class B的一个对象。

解决方案 »

  1.   

    getObject后面要加括号呀,你不是要定义一个函数吗?
      

  2.   

    public class Covariant { public static void main(String[] args){
    Covariant c=new Covariant();
    System.out.println(c.getObject().x);
    }

    public A getObject(){
    return new A();
    }

    class subConariant extends Covariant{  
    public B getObject2(){  //在这里会报错 //这里少个()
    return new B();  
    }
    }
    }class A {
    int x=5;
    }class B extends A{
    int x=6;
    }
    内部类当然可以访问B了,只要包装类能做的,它都能做,
    只是除了包装类,别的外部类是不能再访问内部类了,
    而且返回值的类型是不能作为重载的
      

  3.   

    sorry, 
    正确的代码:
    public class Covariant { public static void main(String[] args){
    Covariant c=new Covariant();
    System.out.println(c.getObject().x);
    }

    public A getObject(){
    return new A();
    }

    private class subConariant{  
    B getObject(){  //在这里会报错
    return new B();  
    }
    }
    }class A {
    int x=5;
    }class B extends A{
    int x=6;
    }
    我刚上面犯了个错误,因为内部类继承了外部包装类,所以系统提示getObject重写了,
    而返回值的类型是不能作为重载的,所以必须该名,
    SORRY!
    正确的写法应该就是这个了