1、繼承基類只有一個非默認構造器,導出類需要 在構造器中調用基類構造器
class Shop{
private static Random random=new Random(47);
private final int i4=random.nextInt(20);
static final int i5=random.nextInt(20);
@Override
public String toString() {
return "Shop{" +
"i4=" + i4 +
",i5=" + i5 +
'}';
}
public static void main(String[] arg){
Shop shop=new Shop();
Shop shop2=new Shop();
Shop shop3=new Shop();
System.out.println(shop);
System.out.println(shop2);
System.out.println(shop3);
}
}
2、final相關細節
final修飾數據編譯時不知道值,只有加載在內存時候纔會初始化
static 裝載時候已經初始化,不會在對象創建時候初始化
final必須在使用前賦值,;必須在域的定義除或者構造函數
final可以作爲修飾參數,這就意味着方法中傳入的參數不可以修改
private修飾方法隱含式的制定final
final修改類該類不可以被繼承,裏面的方法隱含修飾詞爲final
3、類加載,初始化
初始化以及類的加載
導出類初始化加載順序
1、加載基類static修飾的靜態變量
2、加載導出類靜態變量
3、基類變量初始化
4、基類構造器
5、導出類變量初始化
6、導出類構造器
public class test extends Shop{
private final String i1= initNotStatic("parent.i1 final初始化");
private static String i2= init("parent.i2 static初始化");
private String i3= initNotStatic("parent.i3 string初始化");
public test() {
System.out.println("parent 初始化");
}
public static void main(String[] arg){
System.out.println("mian 開始");
test test1=new test();
}
}
class Shop{
private String i1= initNotStatic("child.i1 final初始化");
private static String i2= init("child.i2 static初始化");
private final String i3= initNotStatic("child.i3 string初始化");
public static String init(String s){
System.out.println(s);
return s;
}
public String initNotStatic(String s){
System.out.println("非靜態方法"+s);
return s;
}
public Shop() {
System.out.println("child 初始化");
}
}
類加載順序
1、加載基類static修飾的靜態變量
2、加載導出類靜態變量
public class test extends Shop{
private final String i1= initNotStatic("parent.i1 final初始化");
private static String i2= init("parent.i2 static初始化");
private String i3= initNotStatic("parent.i3 string初始化");
public test() {
System.out.println("parent 初始化");
}
public static void main(String[] arg){
System.out.println("mian 開始");
}
}
class Shop{
public static String i5= init("child.i1 final初始化");
static String i2= init("child.i2 static初始化");
private final String i3= initNotStatic("child.i3 string初始化");
public static String init(String s){
System.out.println(s);
return s;
}
public String initNotStatic(String s){
System.out.println("非靜態方法"+s);
return s;
}
public Shop() {
System.out.println("child 初始化");
}
}