extends(继承)
继承就是一个类继承另一个类的变量和方法,被继承的类为父类,继承的类为子类,java中的继承机制为单继承,即一个子类只能继承一个父类,但一个父类可被多个子类继承,子类无法访问父类的私有成员
子类可以继承和重写父类的成员方法,但注意子类无法继承父类的构造方法,同时子类无法重写父类的私有和静态方法,java中要求子类重写的方法权限要大于父类的方法权限,public>protected>默认>private,子类在重写时要保证参数和方法名完全和父类一致,返回值为父类返回值的同类或者子类
继承中的两个关键字super和this
super指代父类,this指代当前类对象
子类在初始化时要先初始化父类使用super调用父类的构造函数实现
父类 对象 = new 子类
口诀成员变量看等号左边类,成员方法看右边类,即对象调用的方法优先为等号右边子类的方法,而对象访问的变量则是优先父类的默认变量值
如果我们想要重写父类的私有成员可使用super调用父类set和get方法或许有参构造
abstract(抽象)
抽象类无法实例化即无对象,有抽象方法的类都是抽象类,但是抽象类里面不一定有抽象方法,抽象方法没有方法体,子类继承必须得重写抽象方法,否则子类也为抽象类,抽象类可以有成员变量,成员方法和构造函数,抽象类的构造函数
interface(接口)
接口是一个引用数据类型,实现由关键字implements,接口的构成如下
jdk7以及之前
抽象方法: public abstract -> 即使不写public abstract,默认也有
成员变量:public static final 数据类型 变量名 = 值->即使不写public static final,默认也有
final是最终的,被final修饰的变量不能二次赋值,所以我们一般将final修饰的变量视为常量
jdk8
默认方法:public default 返回值类型 方法名(形參){}
静态方法:public static 返回值类型 方法名(形参){}
接口中可包含抽象方法,默认方法和静态方法,其中默认方法和静态方法可有方法体,成员变量需要final修饰,不同于继承,一个类可以实现多个接口,一个接口也可以被多个类实现,且若多个接口中有相同的方法,子类只需实现一次
多态
父类 对象 = new 子类,父类一般为抽象类或者接口,通过不同的的子类,父类会调用相同的方法不同的实现这就是多态,父类对象中方法随其赋值的子类改变而改变,但父类无法直接调用子类特有的方法,口诀也是变量成员看左,方法成员看右
多态的好处是增加了程序的扩展性,例如对于接电话这个方法,不同的人的有不同的动作,有人会接听,有人会挂断,有人会挂机等待,如果不采用多态需要增加多个方法
继承只能单继承,接口实现可以多实现,多态为父类引用子类对象,必须有方法的重写