一:继承(子类与父类是is-a关系)
为什么:方便修改代码
减少代码量
概念: 类是对象的抽象,继承是某一批类的抽象
extends是扩展的意思,子类是父类的扩展
(超类,父类)(子类,基类)
使用:
编写父类:
class Pet{
//公共的属性和方法
}
class Dog{
//子类的特有属性和方法
}
编写子类:
class Penguin extends Pet{ //只能继承一个父类
}
步骤:
使用extends
父类的属性和方法在子类中可以被使用(非私有属性和方法)
java中继承是单继承(如果包含多个父类,同时父类中包含多个重名方法无法决定调用谁)
二:super是直接父类对象的引用
(1)可以通过super访问父类中被子类覆盖的方法和属性
(2)super在普通方法使用:没有顺序限制
super在构造方法使用:若构造方法第一行 ,没有super,java会默认调用super()作为父类的初始化函数
会调用父类的构造方法,只能写在第一行
(3)在构造方法中super与this两个关键词不能同时出现
********(4)父类的私有属性不能被调用包括『父类的构造方法』
PS:new一个子类的对象,最先初始化的是父类的属性和方法,然后再是子类的属性和方法。
所以子类的构造方法里会调用父类的构造方法,注意是super实现的调用而不是继承
并且super可以在子类的普通方法里调用父类的属性和方法。
注意点:不能直接访问private成员
PSPSPSPPSPSPPS总结:创建子类对象的时候一定会优先创建父类对象
(但别妄想直接用父类引用父类的方法,因为你根本不知道父类创建的对象叫什么名字)
所有类都具备一个老祖宗,就是Object,叫类根,但一个类没有继承父类,他就会自动继承类 根
(小问题:但继承了一个父类,是否会通过接口在继承类根,不然里面的工具lang包如何实现)
三:重写(可继承的方法能被重写,因此父类的private方法不能被重写)
在子类根据需要对从基类中继承的来的方法进行重写(子类重写父类方法)
重写方法(必须)和被重写方法具有相同的方法名称,参数列表和返回值(子类和父类的方法除了方法体,其他必须一样)
重写方法不能使用比被重写方法更严格的访问权限(子类的方法比父类方法有更大或者等于的访问权限)(这是由于多态原因)
PS:父类的静态方法子类可以进行调用,但是不可以重写
步骤 1父子类定义同名同参方法(子方法的访问权限大或等,返回值小或等)
2子类方法会被对象先执行,在子类方法super.方法名引用
四:抽象类(像一些父类实例化没有意义 在class前加abstract 限制实例化)不能new
子类在继承父类的时候,必须将父类的抽象方法进行实现或者子类也可以定义为抽象类
抽象方法
没有方法体,抽象方法必须在抽象类,抽象方法必须在子类实现,除非子类也是抽象类
PS:有抽象方法的一定是抽象类,抽象类可以没有抽象方法。
五:final
final类不能继承
final方法不能重写(父类的静态方法也不能被重写,但是它可以被调用)
final值:就是常量了,不可以改变