继承:
描述person这类事物,描述student这类事物,发现两类事物中有相同的属性和行为,导致代码的复用性很差,想要提高代码的复用性,因此模拟现实生活,出现了---继承。
从一个类中派生出新类的过程----继承。
原有的类称之为:父类、超类、基类
新类称之为:子类,派生类
子类继承了父类,相当于子类拥有了父类中的成员(私有、构造器除外)
子类 extends 父类
注意:
不能为了提高代码的复用性而乱使用继承,必须有所属关系才可以使用继承。
特点:
单继承:一个子类只能有一个父类,一个父类可以有多个子类。
在java中允许多重继承,即 A extends B , B extends C ,C extends D....,Object
此时我们所写的类或者所使用的类都是Object的直接子类或者是间接子类。
(父类中私有的成员,在官方文档中写的是不被继承,但是通过代码反推却可以发现这个父类的私有成员却存在。)
(即为私有成员存在,但是不能被直接访问,只能通过父类的公共的get,set方法进行访问)
继承出现后,类中成员的变化:
- 成员变量
如果是非私有的,被子类继承,创建子类对象,可以直接访问。
如果是私有的,子类不能直接访问,通过set和get方法,间接访问。
如果父类和子类中出现相同的变量,建立子类对象,访问的是子类中的,如果想要 访问父类中的该变量,使用super关键字(这种显现实际开发不会出现)。
super:与this用法基本相同
- 代表的是父类引用,即可以访问父类中成员
- 调用父类的构造器
2.成员方法
如果父类和子类中出现了相同的方法定义,但是方法体内容不同,建立子类对象,调用该方法,运行的结果为子类内容,这种现象称之为方法重写或者覆盖。
方法覆盖(override):
出现了继承,子类重写了父类中的方法
方法重载(overlode):
在一个类中,同名方法,参数列表不同,与返回值类型无关。
什么时候方法重写?
父类方法功能不满足于子类的需求。
方法重写的前提条件:
- 返回值类型、方法名、参数列表要求与父类方法一模一样
在jdk5.0 后,允许子类方法返回值类型是父类方法返回值类型的子类
- 访问控制修饰符 大于等于 父类方法
- 是否是静态方法也要与父类保持一致
@Override注解,可以用来验证是否是重写方法。
4.构造方法
1.在子类构造方法的第一行有一条隐藏的super()语句,目的是调用父类的无参数构造方法;如果父类中没有无参数构造方法,那么子类必须手动显示写出super(参数列表),调用父类的有参数构造方法。
2.构造方法的第一行要么是this(参数列表),要么是super(参数列表)
无论使用this(参数列表)调用本类的重载构造方法,至少要保证有一个方法的第一行是super(参数列表语句),目的就是一定要让父类的构造方法执行一次。
描述事物类:
- 私有化属性
- Set与get方法
- 无参数和有参数构造器
- 添加用于返回对象信息的方法