1)使用 extends关键字实现继承
2) Student extends Person, Student类称为子类/派生类, Person称为父类/基类/超类
3)子类继承了父类之后,就自动拥有了父类中定义的实例变量和实例方法
4)在子类中,可以对父类进行扩展,即增加子类特有的属性和方法
继承的好处
a:提高了代码的复用性
b:提高了代码的维护性
c:让类与类之间产生了关系,是多态的前提继承的弊端类的耦合性增强了。开发的原则:高内聚,低耦合。
耦合:类与类的关系
内聚:就是自己完成某件事情的能力
例子:定义计算机类,继承了CPU类
因为CPU是计算机的一个组件,CPU有的属性和行为,计算机都有,虽然可以通过继承实现代码的复用.但是,这种整体体与部分关系的类,建议使用组合,即把部件作为整体类的一个属性
组合:public class Compuer{
Cpu cpu;
}
a:Java只支持单继承,不支持多继承。多继承会出现调用的不确定性,所以不支持
b:Java支持多层继承(继承体系)
Java中类的继承特点
如果想用这个体系的所有功能用最底层的类创建对象
如果想看这个体系的共性功能,看最顶层的类
(1).子类只能继承父类所有非私有的成员(成员变量和成员方法)
(2).子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法
(3).不要为了部分功能去继承
(4).继承体现的是一种 is a 的关系
(5).子父类中出现同名的成员变量是,会根据就近原则使用。——这种情况开发中不会出现,没意义
(6).虽然可以通过子类名或者子类对象名访问到父类的静态成员,但是这不是继承
A:this 和 super都代表什么
this:代表当前对象的引用,谁来调用我,我就代表谁
super:代表当前对象父类的引用
B:this 和 super的使用区别
a:调用成员变量
this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
super.成员变量 调用父类的成员变量
b:调用构造方法
this(...) 调用本类的构造方法
super(...) 调用父类的构造方法
c:调用成员方法
this.成员方法 调用本类的成员方法,也可以调用父类的方法
super.成员方法 调用父类的成员方法
1)在继承时,构造方法不能被继承
2)通过子类创建对象时,要调用子类的构造方法,在子类构造方法执行之前会先执行父类的构造方法
原因:子类会继承父类中的数据,可能会使用父类的数据,所以子类初始化前,一定要先完成父类数据的初始化
3)默认情况下,子类构造方法会调用父类的无参构造,如果父类没有无参构造系统编译报错
4)在子类的构造方法中,可以使用 super(...)来显示的指定调用父类的哪个构造方法(...可以没有内容——无参)
5) super()必须作为子类构造方法的第一条语句
6)子类构造方法中也可以使用this()来调用其他的构造方法
7)在子类的构造方法中不能同时出现this()和 super()
解析:
A.为什么需要进行方法重写??
当子类从父类继承的方法,不能满足子类需求时,可以进行方法重写
B.重写规则:
(1)子类方法的签名(方法名和方法参数列表)必须和父类方法签名一致
(2)如果方法的返回值类型不是引用类型,子类方法的返回值类型和父类方法返回值类型一致
如果方法的返回值类型是引用类型,子类方法的返回值类型可以是父类方法返回值类型的子类
(3)子类方法的访问权限可以比父类方法的访问权限更宽泛
如果父类方法是public,子类方法只能使用public修饰
如果父类方法是 protected,子类方法可以使用 protected/public修饰
如果父类方法是默认的,没有访问权限修饰符,如果子类和父类在同一个包中,子类方法可以默认/ protected
如果父类方法是默认的,没有访问权限修饰符,如果子类和父类不在同一个包中,不能重写
如果父类方法是私有的,不能重写
(4)如果父类有异常抛出,子类重写的方法可以抛出父类异常或者父类异常的子异常
C.可以使用注解@ override来验证重写是否正确
注意:静态只能覆盖静态,其实不算重写,多态时候详解
override和overload的区别?overload能改变返回值类型吗?
overload可以改变返回值类型,只看参数列表
方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的
方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关
子类对象调用方法的时候,先找子类本身,再找父类。