回复 a 是 类 A (class A) 的一个实体(对象)。 执行 a.super(s), 将使用字符串 s 作为参数 来 调用 类 A (class A) 的内部类 B (class B) 的、 要求一个字符串参数的 构造方法,也就是调用 类 OutputInnerClass 的超类(class B)的、要求一个字符串参数的构造方法,以便首先创建父类对象。
class ClassA{
class ClassB{ //内部类
private String name;//内部类的私有属性
public ClassB(String name){//内部类的构造方法
this.name = name;
};
public String info(){//内部类的成员方法
return name;
}
} //内部类定义完毕
}
public class OutputInnerClass extends ClassA.ClassB{
public OutputInnerClass(ClassA a, String s){
a.super(s); // 首先调用父类(ClassA 的内部类)的构造方法
}
public static void main(String[] args){
ClassA a = new ClassA();
OutputInnerClass oi = new OutputInnerClass(a,"顺应天意了却凡尘" );
System.out.println(oi.info());
}
}
发布评论
评论(5)
a.super(s); 不知道这个是个啥玩意?
回复
a 是 类 A (class A) 的一个实体(对象)。 执行 a.super(s), 将使用字符串 s 作为参数 来 调用 类 A (class A) 的内部类 B (class B) 的、 要求一个字符串参数的 构造方法,也就是调用 类 OutputInnerClass 的超类(class B)的、要求一个字符串参数的构造方法,以便首先创建父类对象。
回复
是的。绝对是的。这是"天意":先有父亲,才能有儿子。顺"天意", OOP 的构造方法代码书写规定,第一行,必须是调用父类的构造方法,以便首先生成父亲, 然后再完成儿子的创建。否则,编译就通不过。
回复
@tcxu : 为什么一定要创建父类对象?创建子类对象时一定要先创建父类对象吗?
正如书中代码的注释所言,ClassA.ClassB 是 在类 ClassA 定义之外 引荐 类 ClassA 的内部类 ClassB 的 书写 方法, 就是指 类 ClassB 。 为了进一步演示 继承内部类的场景,在书中代码的基础上,编写一个案例如下。
UML :
输出:顺应天意了却凡尘