黑马程序员技术交流社区

标题: 内部类的一些问题 [打印本页]

作者: 赵庆礼    时间: 2012-6-24 23:57
标题: 内部类的一些问题
本帖最后由  赵庆礼 于 2012-6-25 10:40 编辑

内部类可以继承吗?怎么实现,最好有实例代码,谢谢
作者: 龚龙    时间: 2012-6-25 00:06
当然可以继承了,你继承它的外部类,内部类不就继承过来了么?
作者: 周兴中    时间: 2012-6-25 00:40
本帖最后由 周兴中 于 2012-6-25 00:48 编辑

每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。

内部类可以继承内部类,也可以继承外部类。

public class Outer {
        class Inner {
                void doSomething() {
                        System.out.println("Inner doing ...");
                }
        }

        class Inner2 extends Inner {
                void doSomething() {
                        System.out.println("Inner2 doing ...");
                }

                void readme() {
                        System.out.println("HeHe!");
                }
        }
}

class Test {
        public static void main(String[] args) {
                Outer outer = new Outer();
                Outer.Inner in = outer.new Inner();
                Outer.Inner2 in2 = outer.new Inner2();
                in.doSomething();
                in2.doSomething();
                in2.readme();
        }
}

运行结果:
Inner doing ...
Inner2 doing ...
HeHe!

还有一种继承式的匿名内部类和接口式的匿名内部类.

作者: 周朋飞    时间: 2012-6-25 01:41
class Egg2 {
        protected class Yolk { //
                public Yolk()// 内部类的构造函数
                {
                        System.out.println(this.getClass().getName());
                        System.out.println("you lai dao l zheli ");
                        System.out.println("Egg2.Yolk()");
                }

                public void f()// 内部类的成员方法
                {
                        System.out.println("Egg2.Yolk.f()");
                }
        }

        private Yolk y = new Yolk();// 实例化内部类

        public Egg2()// 外部类的构造方法
        {
                System.out.println("haishi xian lai de zheli ");
                System.out.println("New Egg2()");
        }

        public void insertYolk(Yolk yy)// 外部类的成员方法
        {
                System.out.println("xian  lai  zhe ");
                y = yy;
        }

        public void g() // 外部类的成员方法
        {
                y.f();// 调用内部的成员方法
        }
}

public class T extends Egg2.Yolk {
       
        T(Egg2 egg2) {
                egg2.super();
               
        }

        public static void main(String[] args) {
                Egg2 egg2 = new Egg2();
                //会先实例化成员变量类
                T t = new T(egg2);// 向上转型:即父类引用指向子类的实例(可以访问子类继承或覆盖的属性,不能访问子类独有的属性
               
        }
}
可以被继承,具体细节你可以google一下

作者: 伊文龙    时间: 2012-6-25 02:21
为什么不看毕老师的视频呢??
内部类第4个视频有讲这个问题{:soso_e129:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2