A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 欧阳超 黑马帝   /  2011-10-7 11:55  /  9147 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java内部类可不可以继承内部类怎么实现

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
可以实现。
  1. public class OutClass {

  2. class InterClass{
  3.   private String name;
  4.   public InterClass(String name){
  5.    this.name=name;
  6.   }
  7. }
  8. }
  9. class OutClass1 {

  10. class InterClass1 extends OutClass.InterClass {

  11.   public InterClass1(OutClass outClass, String name) {
  12.    outClass.super(name);
  13.   }
  14.   
  15. }
  16. }

复制代码

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 赞一个!

查看全部评分

回复 使用道具 举报
可以
public class First {
        class ClassFirst extends Second.ClassS{
        public ClassFirst(Second s){
                s.super();
                }
        }
}

        class Second{
                class ClassS{
                public ClassS(){}
                }
}
是这意思吧

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 不错!

查看全部评分

回复 使用道具 举报
可以的,希望对你有帮助
因为内部类的构造器要用到其外围类对象的引用,所以在你继承一个内部类的时候,事情变得有点复杂。问题在于,那个“秘密的”外围类对象的引用必须被初始化,而在被继承的类中并不存在要联接的缺省对象。要解决这个问题,需使用专门的语法来明确说清它们之间的关联:  
class WithInner {  
    class Inner {  
        Inner(){  
           System.out.println("this is a constructor in WithInner.Inner");  
        };  
    }  
}  
   
public class InheritInner extends WithInner.Inner {  
    // ! InheritInner() {} // Won’t compile  
    InheritInner(WithInner wi) {  
        wi.super();  
        System.out.println("this is a constructor in InheritInner");  
    }  
   
    public static void main(String args) {  
        WithInner wi = new WithInner();  
        InheritInner ii = new InheritInner(wi);  
    }  
}  
   
输出结果为:  
this is a constructor in WithInner.Inner  
this is a constructor in InheritInner  
   
可以看到,InheritInner 只继承自内部类,而不是外围类。但是当要生成一个构造器时,缺省的构造器并不算好,而且你不能只是传递一个指向外围类对象的引用。此外,你必须在构造器内使用如下语法:  
enclosingClassReference.super();  
这样才提供了必要的引用,然后程序才能编译通过。

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2 赞一个!

查看全部评分

回复 使用道具 举报
可以的,格式是:
class OutOne{
        class InnerOne extends OutTwo.InnerTwo{}
}
calss OutTwo{
   class InnerTwo{}
}
只需指明继承谁的外部类的内部类就可以了。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马