|
(一)继承 提高代码的复用性 让类与类之间产生关系,为多态提供了前提 基类 ---- 导出类 this 本类对象的引用 super 代表父类空间 覆盖:保留父类方法的声明,增强方法的功能。 注意:覆盖父类方法的权限必须大于父类 子类初始化过程 /** * 对象初始化过程 * Person p = new Person(); * 1. JVM读取指定路径下的Person.class文件,并加载进内存 * 加载的时候会一并加载Peron的父类(如果有直接父类的情况下) * 2. 在堆内存中开辟空间,分配地址 * 3. 并在对象空间中,对对象的属性进行默认初始化 * 4. 调用对应的构造函数进行初始化 * 5. 在构造函数中,第一行会先调用父类中的构造函数进行初始化 * 6. 父类初始化完毕后,再对子类的属性进行显示初始化 * 7. 再进行子类构造函数的特定初始化 * 8. 初始化完毕后,将地址赋值给引用变量 */ //父类 class Fu{ static{ System.out.println("1"); } { System.out.println("3"); } Fu(){ System.out.println("4"); show(); //注意,这里调用的是子类的show(),在这个时候子类的num还没有显示初始化 } public void show(){} } //子类 class Zi extends Fu{ int num = 520; static{ System.out.println("2"); } { System.out.println("5"); } Zi(){ //super(); 默认调用父类的无参构造函数 System.out.println("6"); } public void show(){ System.out.println("zi的show"+num); } } /* 注意:如果父类显示定义了非空参构造函数,那么子类的构造函数中就需要显示的指定父类对应的构造函数 */ final 最终的 修饰类、方法、变量 修饰的类不能被继承、修饰的方法不能被覆盖,修饰的变量是常量 abstract,抽象 不能具体描述的方法,可以定义为抽象的方法【抽象的方法没有方法体】 含有抽象方法的类是抽象类 抽象类不能被实例化(因为抽象类是没有具体描述的,需要进一步具体描述) 抽象关键字不能与【private、final、static】共存 //雇员 abstract class Employee{ private String id; //id private String name; //姓名 private double pay; //薪水 public Employee(String name, double pay) { this.name = name; this.pay = pay; } //雇员的工作内容不具体,所以定义为抽象的 public abstract void work(); } //项目经理 class Manager extends Employee{ private int bonus; //奖金 public Manager(String name, double pay,int bonus) { super(name, pay); this.bonus = bonus; } @Override public void work() { System.out.println("管理项目"); } } interface 接口 接口是更加抽象的抽象类 变量: public static final.. 方法: public .. 接口暴露规则、提高扩展、降低耦合 注意:对外暴露规则的功能都可以称之为接口 继承是关系、接口是功能 abstract class 犬{ abstract void 吼叫(); } interface 导盲{ void 导盲(); } class 导盲犬 extends 犬 implements 导盲{ @Override public void 导盲() { System.out.println("导盲"); } @Override void 吼叫() { System.out.println("汪汪叫"); } }
|