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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 龙行无忌 中级黑马   /  2015-2-8 12:48  /  1630 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个类的内部类该如何继承呢?

3 个回复

倒序浏览
内部类可以继承,因为内部类的构造器要用到其外围类对象的引用,所以在你继承一个内部类的时候,事情变得有点复杂。问题在于,那个“秘密的”外围类对象的引用必须被初始化,而在被继承的类中并不存在要联接的缺省对象。要解决这个问题,需使用专门的语法来明确说清它们之间的关联:  
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 收起 理由
lwj123 + 2

查看全部评分

回复 使用道具 举报
万合天宜 发表于 2015-2-8 13:30
内部类可以继承,因为内部类的构造器要用到其外围类对象的引用,所以在你继承一个内部类的时候,事情变得有 ...

好强大,学习了
回复 使用道具 举报
谢谢,明白了,不过@万合天宜的main方法写错了,不是public static void main(String args),应该是public static void main(String[] args).主函数中接收应该是字符串数组参数,而不是字符串参数。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马