一、继承
1、继承就是子类继承父类的特征和和行为,使得子类对象具有父类的实例域和方法,还可以以此基础添加新方法和域来满足需求。
2、首先调用父类构造方法实例化父类对象,然后调用子类构造方法实例化子类。
3、若父类只有有参构造,则子类不存在无参构造。
4、父类只有无参构造,子类可以存在有参构造
5、单继承局限:java中一个类智能使用extends继承一个父类。
6、要使用继承必须满足is-a原则
public class Person {
int age;
public Person(int age){
this.age=age;
}
}
class Student extends Person{
public Student(){
super(): 这句话子类默认就有这句话,所以无参构造本来就有, //因此报错
}
public Student(int age){
super(age);
}
}
二、重载与重写的区别
(1)方法重载与方法重写都是Java多态的实现。
(2)方法重载:在同一个类中定义了若干个方法名称相同,参数个数或类型不同,返回值无关的一组方法。 如System.out.println();
(3)方法重写:在有继承关系的类之间,子类定义了与父类除了权限以外全都相同的方法。 子类方法权限必须>=父类方法权限(private除外,因为private是私有,不能出现在重写中)
三、向上转型与向下转型
1、向上转型 :父类 父类引用=new 子类实例();
用于参数统一化。
Person per = new Student();
per引用能使用的方法:只能使用父类中定义好的方法。
2、向下转型子类 子类引用=(子类)父类引用
要进行向下转型必须先进行向上转型、一般与向上转型搭配使用。Student stu=(Student)per;
四、抽象类
1、抽象类用关键字abstract定义。
2、抽象类无法直接实例化对象
3.abstract 和 final不能同时出现,有矛盾。 abstract和private不能同时出现
4.抽象类的子类要么实现所有抽象方法(存在方法体),要么子类也是抽象类。
5.抽象类存在普通属性和普通方法
6.抽象类存在意义:限制子类必须进行某种动作(编译器会检查子类是否全部复写父类中的抽象方法)。
五、模板
1、模板模式(模板方法模式)是基于抽象类的一种模式。
2、模板模式有一个共同的抽象基类,模板方法使用final封装到基类中子类延迟实现若干步骤
3、一个标准的模板抽象类如下:
public abstract class Template{
//模板方法,子类只能使用无法覆写(因为final)
public final void algorithm(){
concertMethod();
}
public void concretMethod(){
//大家共享方法
}
//基类不知道实现,延迟到子类实现
public abstract method();
//钩子函数
//基类中默认什么都不用做,子类可以扩展
public void hook(){
}
}