public class Base { // 換成 public 也不行,由於繼承關係,仍是會調用子類baseName 未初始化 // (初始化階段是類變量賦值,建立對象纔會賦值成員變量(賦值在構造函數執行前),因此 仍是null private String baseName = "base"; public Base() { System.out.println("Base!!!!!!!!!!!!!!!"); callName(); } public void callName() { System.out.println("Base callName!!!!!!!!!!!!!!!"); System.out.println(baseName); } static class Sub extends Base{ private String baseName = "sub"; public Sub(){ System.out.println("Sub!!!!!!!!!!!!!!!"); } public void callName() { System.out.println("Sub callName!!!!!!!!!!!!!!!"); System.out.println(baseName); } } public static void main(String[] args) { new Sub(); } }
我的理解:java