面向对象的特征
继承(extends):public class 子类 extends 父类
Ctrl+T 查看继承结构
1.1 体现:一旦子类A继承父类B之后,子类A中就获取到了父类B中声明的结构、属性和方法
? 特别的,父类中声明为private的属性和方法,子类继承父类之后,仍然认为获取了父类中私有的结构,只是因为封装性的影响,使得子类不能直接调用父类的结构而已
示例:
public class A extends B{}
**1.2 **子类继承父类之后,还可以声明自己特有的属性和方法,实现功能的拓展
1.3 子类和父类的关系:不同于子集和集合的关系
? extends:延展 拓展
1.4 java中关于继承性的规定:
- 一个子类只能有一个父类
- **Java中类的单继承性:**一个类只能有一个父类
- 子父类是相对的概念
- 子类直接继承的 父类,称为直接父类;同理,间接继承的父类称为间接父类
1.5
- 如果没有显示的声明一个类的父类的话,此类继承于java.lang.Object类
- 所有的java类(除java.lang.Object类之外)都直接或间接继承于java.lang.Object类
继承性的好处
-
减少代码冗余,提高代码复用性 -
便于功能拓展 -
为多态的使用提供前提
概念
-
重写:子类继承父类之后,可以对父类中同名参数的方法,进行覆盖操作 -
应用: 重写之后,当创建子类对象,通过子类对象调用子父类中的同名同参数的方法时,实际执行的是子类重写父类的方法 -
重写的规定: ? 方法的声明: 权限修饰符 返回类型 方法名(形参列表){
}
要求:
-
重写和被重写的方法名、形参列表要相同 -
子类重写的方法权限修饰符不小于父类被重写的方法权限修饰符 ? >特殊情况:子类不能重写父类中声明为private权限的方法 -
返回值类型: ? >父类被重写的方法返回值类型是void,则子类重写的方法返回值类型只能是void ? >父类被重写的方法返回值类型是A类型,则子类重写的方法返回值类型可以是A类或A类的子类 ? >父类被重写的方法返回值类型是基本数据类型(比如double),则子类重写的方法返回值类型必须是相同的基本数据类型 -
子类重写的方法抛出异常类型不大于父类被重写的方法
子类和父类中的同名同参数的方法要么都声明为非static的,要么都声明为static的(不是重写)
重载(Overload)和重写(Override)的区别:
方法的重载和重写都是实现多态的方式
区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。
重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。
重载对返回类型没有特殊的要求,不能根据返回类型进行区分
(1)理解
- super可以理解为:父类的
- super可以用来调用属性、方法、构造器
(2)使用方法
super.属性
super.方法
//显示调用父类中声明的属性或者方法
(3)使用情景
- 子类和父类中定义了同名属性,想在子类中调用父类中生命的属性时,super.属性
- 子类重写了父类的方法之后,调用父类中被重写的方法时,super.方法
(4)super调用构造器
- 4.1 可以在子类的构造器中显式使用**“super(形参列表)”**的方式,调用父类中声明的指定构造器
- 4.2 **“super(形参列表)”**的使用,必须声明在子类的首行!
- 4.3 类的构造器中,针对**“this(形参列表)”或“super(形参列表)”**只能二选一,不能同时出现
- 4.4 在构造器的首行,没有显示声明“this(形参列表)”和“super(形参列表)”,则默认调用父类中空参构造器super()
- 4.5 在类的多个构造器中 至少有一个类中使用了“super(形参列表)”,调用父类中的构造器
(5)super调用构造器需要注意
- this(形参列表): 本类重载的其他的构造器
- super(形参列表): 调用父类中指定的构造器
(1)多态:父类的引用指向子类的对象(子类的对象赋给父类的引用)
? 理解:可以理解为一个事物的多种形态,可以直接用在抽象类和接口上
(2)多态的使用:当调用子父类同名同参数的方法,实际执行的是子类重写父类的方法–虚拟方法调用
? 有了对象的多态性之后,编译期只能调用父类中声明的方法,但运行期实际执行的是子类重写父类的方法
? 总结:编译看左,运行看右
? 前提:(1)类的继承关系 (2)方法的重写
(3)对象的多态性只适用于方法,不适用于属性(编译和运行都看左边)
(4)重载和多态的区别:
|