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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 壁虎 中级黑马   /  2013-3-23 16:09  /  2626 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 tuo1254 于 2013-3-24 08:08 编辑

我们都知道,子类可以覆盖父类中的函数
我想知道,父类中在成员位置上定义了一个内部类,我子类继承后能覆盖此内部类吗?为什么?

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-24 07:32

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览


1.父类中在成员位置上定义了一个内部类,相当于这个类的一个成员变量 。子类可以覆盖  。代码为证
class Out{
       
        class Inner{
                void print(){
                       
                       
                        System.out.println("i anm inner1");
                }
               
        }
       
}


class Out2 extends Out{
       
       
        class Inner{
                void print(){
                       
                       
                        System.out.println("i anm inner2");
                }
               
        }
}

public class Test {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                        new Out2().new Inner().print(); // 打印 i anm inner2
        }

}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
// 父类
class Fu{
        class T_1{                                        //定义一个内部类T1
                public void run(){                        //内部类中有run方法
                        System.out.println("Fu");
                }
        }
}
//子类
class Zi extends Fu{                                //子类继承父类
        class T_1{                                        //覆写其父类的内部类
                public void run1(){                //注意:为了做一点改变,特意让子类内部类中的方法名为run1
                        System.out.println("Zi");
                }
        }
}
//主函数
class Test{

        public static void main(String[] args){
                Zi z = new Zi();                                        //创建子类对象
                z.new T_1().run1();                                //调用子类对象中内部类的run1方法,编译通过
        }                                                              //输出结果为   “Zi”
}

由此可以看出,不管是什么样的类型,只要在类中声明,那么他就是该类的成员。

点评

最好将代码写入代码框中,这样会清晰一点;注释最好写在相应代码的上方比较好些,希望对你有帮助  发表于 2013-3-23 17:48

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果是静态的可以覆盖吗,在局部的内部类,如果有静态的属性,和方法,这是不能被覆写的, 只有在成员位置上而且都要有public 修饰
回复 使用道具 举报
父类内部类是静态的也可以覆盖。
  1. class OuterClass1
  2. {
  3.         private        int a = 10;
  4.         static        class Inner
  5.         {
  6.                 private int a = 20;
  7.                 private int b = 5;
  8.                 void one(){
  9.                         System.out.println(b);
  10.                         System.out.println(a);
  11.                         System.out.println(this.a);
  12.                 }       
  13.         }
  14.         void test(){
  15.                 Inner i = new Inner();
  16.                 i.one();       
  17.         }
  18. }

  19. class OuterClass2 extends OuterClass1
  20. {       
  21.         static        int b = 100;
  22.         static        class Inner
  23.         {
  24.                 void one(){
  25.                
  26.                         System.out.println("b = "+ b);
  27.                 }
  28.         }
  29.         void test(){
  30.                 //Inner i = new Inner();
  31.                 new Inner().one();       
  32.         }
  33. }

  34. class TestInner{
  35.         public static void main(String[] args){
  36.                 new OuterClass2().test();
  37.                 new OuterClass().test();
  38.                 //OuterClass.Inner i = new OuterClass().new Inner();
  39.                 //i.one();
  40.                 //OuterClass.Inner i = new OuterClass.Inner();
  41.                
  42.                 //i.one();
  43.         }
  44. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

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