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的一个对象。
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的一个对象。
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了,只要包装类能做的,它都能做,
只是除了包装类,别的外部类是不能再访问内部类了,
而且返回值的类型是不能作为重载的
正确的代码:
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!
正确的写法应该就是这个了