对象创建



创建子类对象时,所有的父类对象都会被创建。



构造函数从顶层父类开始一直向下,直到子类被实例化。



子类构造函数中不提供对super()的显示调用,编译器会调用父类的无参数构造函数。



如果父类未提供无参构造函数,编译器会默认提供一个无参构造函数,这只会发生在没有为类定义任何其他构造函数的情况下



如果类已经定义了构造函数(无参/有参),编译器将不会提供无参构造函数



super调用父类,this调用当前类



 



方法重载



方法名称相同,参数个数和顺序不同



多个构造函数,在构造函数的实现中this或super调用只能出现一个且必须出现在第一行。



 



创建复制构造函数



用一个已经实例化的对象来new另一个对象,获得两个独立对象



深复制



public class Student { 

   private String name; 

   private int age; 

   private int sex; 

   // 构造方法 

   public Student() { 

   } 

   // 拷贝构造方法 

   public Student(Student t) { 

   super(); 

   this.name = t.name; 

   this.age = t.age; 

   this.sex = t.sex; 

   } 

   public static void main(String[] args) { 
 
   Student student1 = new Student(); 

   Student student2 = new Student(student1); 

   student1.name = "name1"; 

   student2.name = "name2"; 

   System.out.println("student1.name:" + student1.name); 
 
   System.out.println("student2.name:" + student2.name); 

   System.out.println("student1:" + student1); 

   System.out.println("student2:" + student2); 

   } 

   }



输出:



student1.name:name1



student2.name:name2



student1:demo1.Student@7852e922



student2:demo1.Student@4e25154f


final关键字 限制扩展或修改



final类



public final class MyClass { 

   } 

   public class MyClass2 extends MyClass { 

   } 

   //The type MyClass2 cannot subclass the final class MyClass 

   不可以被继承 
 
   final方法 
 
   public class MyClass { 

   public final String getName() { 

   return this.getClass().getName(); 

   } 

   } 

   public class MyClass2 extends MyClass { 

   public String getName() { 

   return super.getClass().getName(); 

   } 

   } 

   //Cannot override the final method from MyClass 

   private、static方法也不能被子类重写 

   final变量 

   public class MyClass2 extends MyClass { 

   public final String NAME = "lzg"; 

   }

final变量以大写字母命名,单词之前用下划线分隔



final变量不能被修改,类中的final变量视作常量



final变量声明时可以不用初始化,叫做空缺final变量



空缺final变量必须在构造函数中初始化,且只能初始化一次



空缺final变量在使用前必须进行初始化



 



final类变量



final类变量只能指向当前类对象的引用



可以调用当前对象的方法来改变当前对象的状态,但是不能给final类变量指向一个新的实例



 



 



访问修饰符



public 任意类可见



protected 当前类可见,子类可见,相同包的类可见



private 当前类内部可见



default 相同包可见



 



 

当前类

子类(同包)

子类(不同包)

其它类(同包)

其它类(不同包)

public

protected

×

private

×

×

×

×

default

×

×



 



继承相关规则



子类中重写方法的可见性不能小于父类中的方法在