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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张榆 中级黑马   /  2012-9-16 20:44  /  1840 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张榆 于 2012-9-16 22:50 编辑

一个内部类抽象了,那么是什么样的子类可以继承它?

评分

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

查看全部评分

5 个回复

倒序浏览
内部类实际上是作为外部类的数据成员来实现的。
内部抽象类的多重实现可以看做是把一个抽象类(二级内部抽象类)定义为一个抽象类(一级内部抽象类)的一个数据成员,这是可以实现的。
继承内部类的抽象类,同时也就是继承内部类的外部类,同时也继承外部类的数据成员,这样就必须需实现外部类的内部抽象类成员,和继承一般类一样继承类,并实现内部抽象类!

评分

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

查看全部评分

回复 使用道具 举报
武庆东 发表于 2012-9-16 21:05
内部类实际上是作为外部类的数据成员来实现的。
内部抽象类的多重实现可以看做是把一个抽象类(二级内部抽 ...

我说的是其它外部类来继承这个抽象内部类,怎么继承?
回复 使用道具 举报
张榆 发表于 2012-9-16 21:14
我说的是其它外部类来继承这个抽象内部类,怎么继承?

哦  我知道了
子类如果想继承抽象内部类,就必须在这个类中定义一个带有外部类对象的构造方法,并在构造方法中调用外部类.super();


谢谢
回复 使用道具 举报
本帖最后由 夏诗瑶 于 2012-9-16 21:43 编辑

//首先,内部类其实就是一个子类对象
//其实内部类的出现,在一定意义上实现了多继承。因为内部类 可以有多个,分别继承别的类。外部类也可以用内部类里的方法了。
//然后,关于你的问题。子类如果想继承抽象内部类,就必须在这个类中定义一个带有外部类对象的构造方法,并在构造方法中调用外部类.super();

代码如下:
class Outer {
abstract class Inner {
  abstract void show();
  public void print() {
  }
}
}
class Test extends Outer.Inner {// 如果不这么继承,必须导入Inner类的包。
Test(Outer out) {
  out.super();
}
@Override
void show() {
}
}

评分

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

查看全部评分

回复 使用道具 举报
示例代码:
class AbstractTest {  //这里类修饰符可以使用abstract 修饰
    static abstract class A{
   /* A作为抽象类,那么static 必须保留,做为类静态成员变量。 A内部类,为外部类AbstractTest 的一个成员属性,随着对象的创建而加载,不能直接调用内部类,要调用只能new AbstractTest ().A。要想继承的话,只能把内部类改成静态内部类,static abstract class A {},此时对着类的加载而加载。*/
        abstract void say();
        }
   
      void c(){
       System.out.println("sss");
       }

}
class B extends AbstractTest.A{
     public static void main(String[] args){

}

    @Override
    void say() {
        // TODO Auto-generated method stub
        }
}
重点:非静态内部类,伴随着类的实例化开辟内存单元。 A抽象内部类,为外部类AbstractTest 的一个成员属性,随着对象的创建而加载,不能直接调用内部类,要调用只能new AbstractTest ().A。要想继承的话,只能把内部类改成静态内部类,static abstract class A {},此时对着类的加载而加载。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马