最近看《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(),而且传入的是所继承的内部类的构造器所需要的参数,我搜索了一下没有找到相关的解释,这是固定的语法么
忘各位解惑,谢谢。
jika kod itu ditukar kepada:
Tiada lagi X.NEW diperlukan.
Ini bukan
super
yang memanggil kelas luaran, tetapiFirstInner
yang anda panggilsuper
mesti ditulis seperti ini.Apabila memperoleh kelas dalam (bukan statik), anda mesti mempunyai objek kelas luarnya Ini membawa kepada sintaks yang kelihatan pelik seperti
so.new SecondInner(fo)
x.super("hello")
Anda boleh abaikan apabila memahami Tidak mengapa untuk mengalih keluarso.
x.
pada bahagian hadapan dan memahaminya sebagai peraturan tatabahasa.Sama seperti reformasi @好学利行, yang mungkin lebih mudah difahami dan lebih biasa.
Adakah mungkin untuk menggabungkan x baru dan super(...) menjadi satu? Ini kali pertama saya melihat tulisan sebegini.