学习内容
- 继承与多态
- 继承使用场景与构造方法
- 多态的使用
1.继承 Extends
继承是面向对象的三大特征之一,也是软件实现复用的重要手段,Java的继承具有单继承的特点,即每个子类只有一个直接父类。
2.继承使用场景
(1)、子类需要额外添加成员变量
(1)、子类需要添加自己独有的行为方式
//基类 父类
class Car{
protected int wheels;//成员变量可以被继承
public string color;
public Car(int wheels){ //构造方法不可以被继承
this.wheels=wheels;//this:表示访问当前类或者对象的属性或者方法
}
public void startEngine(){ //方法可以被继承
}
//子类
class Audi extends Car{
String feeling;
//子类使用super()调用父类的构造方法
public Audi(int wheels,String feeling){
super(wheels);
}
}
构造方法的执行顺序:父类A—>子类B—>子类C
而且子类不能继承父类private修饰的属性或者方法。
如果子类需要在父类的基础上重新实现父类的方法,子类必须重写,这个过程称为重写或覆盖
在执行时先从当前类里查找这个方法,如果没有就从父类去查找,如果父类中也没有这个方法,就报错。重载与重写的区别:
重载:同一个类里面 方法名相同 参数不同
重写:两同:方法名相同 参数相同
两小:a.子类的返回值必须比父类的返回值小或者相同; b.子类抛出的异常要比父类抛出的异常要小或者相同
一大:子类的修饰符范围要比父类更大或者相同
如果没有做到,那么就会出错
我们编程讲究:低耦合、高内聚
继承的优点:复用性更强
缺点:a.打破了封装性,是子类与父类耦合性大;b.安全性降低
设计原则:
(1)尽量隐藏父类的内部数据(private)
(2)不要让子类可以随意访问(final)
(3)尽量不要再构造函数中调用被子类重写的方法
3.多态的使用
多态:编译与运行时是两个东西,不同的对象
子类可以向父类转化
在编译与运行时的对象是具有继承关系的、且只能是子类对象传给父类对象时才可以使用多态(不能父类的对象传给子类)
在使用的时候,如果需要使用之类的方法或者属性,必须强制转化为对应的子类对象