为了账号安全,请及时绑定邮箱和手机立即绑定

关于内部类继承另一个类的内部类

关于内部类继承另一个类的内部类

临摹微笑 2019-03-06 18:15:30
最近看《Thinking in Java》,关于内部类的继承那一章。其中有一个练习:“创建一个包含内部类的类,此内部类有一个非默认的构造器(需要参数的构造器)。创建另一个包含内部类的类,此内部类继承自第一个内部类。”下面是书中给出的代码:class FirstOuter {    public class FirstInner {        FirstInner(String s) {            System.out.println("FirstOuter.FirstInner() " + s );         }    }}public class SecondOuter {    public class SecondInner extends FirstOuter.FirstInner {        SecondInner(FirstOuter x) {             x.super("hello");             System.out.println("SecondOuter.SecondInner()");         }            }    public static void main(String[] args) {        FirstOuter fo = new FirstOuter();        SecondOuter so = new SecondOuter();        SecondInner si = so.new SecondInner(fo);            }    }我的疑惑是这里,x.super("hello"); ,为什么是调用另一个外部类的super(),而且传入的是所继承的内部类的构造器所需要的参数,我搜索了一下没有找到相关的解释,这是固定的语法么忘各位解惑,谢谢。
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

难道是把x. new和super(...)合二为一?第一次见到这种写法。


查看完整回答
反对 回复 2019-04-17
?
波斯汪

TA贡献1811条经验 获得超4个赞

如果把代码改为:


public class SecondOuter {


    public static class SecondInner extends FirstOuter.FirstInner {

        SecondInner() {

            super("hello");

            System.out.println("SecondOuter.SecondInner()");

        }

    }


    public static void main(String[] args) {

        FirstOuter fo = new FirstOuter();

        SecondOuter so = new SecondOuter();

        SecondOuter.SecondInner si = new SecondInner();

    }

}

class FirstOuter {

    public static class FirstInner {

        FirstInner(String s) {

            System.out.println("FirstOuter.FirstInner() " + s);

        }

    }

}

就不再需要x.new,其实简单理解就是不是静态内部类就像一个对象参数,我们必须首先把对象实例化才能进一步对参数进行处理。


查看完整回答
反对 回复 2019-04-17
  • 3 回答
  • 0 关注
  • 736 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信