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

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

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

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

评分

参与人数 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

查看全部评分

回复 使用道具 举报
如果是静态的可以覆盖吗,在局部的内部类,如果有静态的属性,和方法,这是不能被覆写的, 只有在成员位置上而且都要有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

查看全部评分

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