本帖最后由 付玉光 于 2013-3-9 21:02 编辑
class Outer
{
int x = 5;
class Inter{
void method(){
System.out.println("method"+x);
}
}
void printInfo(){
System.out.println("Outer running");
}
}
class SonOuter extends Outer{
class Inter{
void method(){
System.out.println("method--"+x);
}
}
void printInfo(){
System.out.println("SonOuter running");
}
public static void main(String[] args){
//楼主这句有问题。!!!!
Outer.Inter inout = new SonOuter().new Inter();
inout.method();
}
}
{:soso_e100:}楼主提的问题非常好,一看这个题目,我就知道楼主很有思想。
让我来回答,高手的这个问题!
①
首先楼主提的题目中有一句是《定义一个内部类重写其父类中的内部类》,
在这句话中,我们可以看出,楼主把多态的特征之一(可以对方法进行重写)
用在了类上,楼主想把一个类给重写!我不禁惊叹,楼主的思想应该不会产生
异常了吧?在我所知的java领域中,一个类是不能重写另一个类的!!
②
在此,楼主对内部类生产的原因应该也不清楚吧,就让小弟我引用
咱版主(陈丽莉)java复习大纲中的一句话:来给你阐述一下:
原句是这样的《如果一个类A要使用B类的所有成员,并且A类不需要被除B以外的其他类访问,
则我们可以把A定义成B的内部类 》,也就是说内部类的主要用途
1 ,使用外部类的成员 2 ,它与除外部类之外的其它类没有任何关系。
③
楼主的这句话《Outer.Inter inout = new SonOuter().new Inter();》
意思是建立了一个Outer类中内部类为Inter的引用变量inout,
并把这个变量的引用指向了一个
继承自Outer类的(SonOuter类)中的一个内部类实例对象。
由于这个变量的引用类型,与创建SonOuter类的内部类对象为不同的《类类型》,
所以编译出错:提示类型是不兼容的。
|