继承
继承是一种由已有的类创建新类的机制。利用继承可以先定义一个共有属性的一般类,根据该一般类再定义具有特殊属性的子类,子类继承一般类的属性和行为,并根据需要增加它自己的新的属性和行为。
特点:java不支持多重继承,即子类只能有一个父类。
关键字:使用关键字extends来定义一个类的子类 。
作用:代码复用,子类在父类父类中拿到需要的属性和方法,再此基础上进行新增成员、方法重写,不必一切“从头做起”。
成员变量的隐藏:声明的成员变量的名字从父类继承来的成员变量的名字相同,这种情况下子类就会隐藏所继承的成员变量。其特点是在子类自己的方法里,用的是子类自己的新变量,父类同名变量被“藏起来了”,类继承的方法所操作的成员变量一定是被子类继承或隐藏的父类成员变量。
方法重写:也称方法覆盖,是子类继承父类后,在子类中定义与父类方法名、参数个数、参数类型完全相同的方法,父类被 final修饰的方法不能重写;重写的目的是子类改写继承来的方法,定义属于自身的行为。当子类重写父类方法后,子类对象调用该方法会执行子类重写后的版本;若子类没有重写,则调用继承自父类的原有方法。重写方法既可以操作继承的成员变量,调用继承的方法,也可以操作子类新声明的成员变量,调用新定义的其他方法,但无法操作被子类隐藏的成员变量和方法。如果子类想使用的话,就必须使用关键字super。
super关键字:子类隐藏的成员变量和方法,那么子类创建的对象就不能拥有和调用被隐藏的成员变量和方法,该方法的调用有关键字super负责。创建子类对象时,子类构造方法会优先调用父类构造方法;子类不会继承父类的构造方法,需要借助 super 调用父类构造。 super() 必须写在子类构造方法的第一行,若子类构造没有显式写 super ,会默认调用父类的无参构造方法。
final关键字:final 修饰类,则类不能被继承;修饰方法,方法不能被子类重写;修饰变量,变量成为常量,只能赋值一次,不可更改。
接口
使用关键字interface来定义一个接口,接口的定义与类的定义很相似,分为接口声明和接口体。
接口声明:定义接口包含接口声明和接口体,和类不同的是,在定义接口时使用关键字interface来声明自己是一个接口,格式:interface接口的名字;
接口体:
①接口体中的抽象方法和常量: 在接口体中可以有抽象方法和常量,所有抽象方法的访问权限一定都是public,而且允许省略抽象方法的public和abstract修饰符,接口体中所有static常量的访问权限一定都是public,而且允许省略public ,final和static修饰符。所以接口体重不会有变量。
②接口体中的default实例方法: 从jdk 8版本开始,允许使用default关键字、在接口体中定义称作default的实例方法(不可以定义default的static方法)Default实例方法的访问权限必须是public(允许省略public修饰符)但不可以省略default关键字。
③接口体中的static方法: 从jdk 8版本开始,允许在接口体中定义static方法。
④接口体中的private方法: 从jdk 9版本开始,允许在接口体中定义private的方法,其目的是配合接口中的default实例方法,即接口可以将某些算法封装在prevate的方法中,供接口中的default实例方法调用,实现算法的复用。
本文内容摘抄整理自《Java2实用教程》教材,仅作为个人学习作业分享。