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 初始化");
}
}