继承
- 什么是继承?
在现有的类的继承上定义一个新的类,现有的类称为父类,新的类称为子类,子类会自动拥有父类的内容。
extends 关键字:表示继承。
- 继承格式
class 类名 extends 父类名{ }
和普通类多了一个 extends 父类名
- 继承的好处
子类会自动拥有父类的内容,提高代码复用性。
- 继承的特点
Java中只支持单继承
一个类可以有多个子类
支持多层继承
- 注意
子父类没有相对的概念
一个类没有继承别的类的时候默认继承Object
- 子类不能继承父类的内容
并不是子类能够继承父类的所有东西,以下内容子类不能继承:
被private修饰的
构造方法不能继承
- 继承后的特点
成员变量
自己有就用自己的,自己没有就用父类的(就近原则)
当子父类出现了同名变量时,子类需要访问父类中非私有的成员变量时,需要使用到super关键字,
格式
super.父类变量名
成员方法
成员方法不重名
如果子类父类中出现不重名的成员方法,这时的调用是没有影响的。对象调用方法时,会先在子类中查找有没有对 应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。
成员方法重名----重写
方法重写:子类出现与父类方法一样时(返回值类型,方法名,参数列表都一样)会出现覆盖效果,也称为重写
方法重写注意事项:
两同两小一大
两同: 参数列表相同,方法名相同。
两小: 返回值要比被重写方法返回值要小或者一样,(重写方法的返回值要是被重写方法返回值的子类)
重写方法抛出的异常要比被重写方法抛出的异常要小或者是一样
一大:重写方法的权限修饰符要大于或者大于被重写方法的权限修饰符
继承后的特点------构造方法
构造方法是不能继承的
构造方法是用来初始化成员变量的,所以子类的构造方法中默认有一个super() ,表示调用父类构造方法
继承后标准构造方法写法:
1. 子类的无参调用父类的无参构造
2. 子类的有参构造调用父类的有参构造,自己的成员变量自己赋值
super和this
super :代表父类的存储空间标识(可以理解为父亲的引用)。
this :代表当前对象的引用(谁调用就代表谁)
this.成员变量 ‐‐ 本类的
super.成员变量 ‐‐ 父类的
this.成员方法名() ‐‐ 本类的
super.成员方法名() ‐‐ 父类的
访问构造方法
this(...) ‐‐ 本类的构造方法
super(...) ‐‐ 父类的构造方法
子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造 会覆盖默认的super()。
super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现。
java继承的特点
Java只支持单继承,不支持多继承
Java支持多层继承(一个类可以有多个子类)
顶层父类是Object一个类没有继承别的类默认继承Object
封装
什么是封装:把私有的东西隐藏起来,不让外界直接访问。
封装的原则(步骤):
将隐私的内容私有
提供get和set方法让外界访问
封装的格式:
private 数据类型 变量名 ;
封装的好处:
提高代码的安全性
多态
多态定义:
同一行为的不同体现。
多态前提:
类要有继承或者实现的关系
要有方法的重写,如果没有重写则动态没意义
父类引用指向子类对象(格式)
多态的具体格式:
父类类型 变量名 = new 子类类型();
父类类型:指子类对象继承的父类类型,或者实现的父接口类型。
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写 后方法
编译看子类,运行看父类
多态的好处:
在创建方法时参数类型可以选择父类类型,掉用方法时可以传入子类对象,有利于扩展。