第七章 类的深入解析
1. 继承
1.1 类继承的方法:在Java中,子类对父类的继承是在类的声明中使用extends关键字来指明的。其一 般格式为:[类修饰符] class <子类名> extends <父类名>{ 类体内容 }。一个类只能直接继承一个 父类,一个父类可以有多个子类。
1.2 成员变量的继承和隐藏:基于父类创建子类时,子类可以继承父类的成员变量和成员方法。但是, 如果在父类和子类中同时声明了一个同名变量,则这两个变量在程序运行时同时存在。即:父类的 成员变量用于父类方法,子类的成员变量用于子类方法,互不干扰。
1.3 方法的继承与覆盖:子类可以继承父类中所有可以被子类访问的成员方法,但如果子类重新定义了 从父类继承的方法,此时父类的这个方法在子类中将不复存在,此时称为子类方法覆盖了父类的方 法,简称方法的覆盖(override)。
1.4 构造方法的继承:当通过子类创建对象时,系统会首先调用父类的无参构造方法,然后才会执行子 类的构造方法。如果想要调用父类的有参构造方法,可以使用super关键字。
2. 多态性:多态性是指同名的不同方法在程序中共存。即同一个方法定义几个版本,程序运行时根据不 同情况执行不同的版本。“一个对外接口,多个内在实现方法”
多态性的实现方式:
(1)方法覆盖实现多态性
此时通过子类对继承父类的方法进行重定义来实现。
(2)方法重载实现多态性
通过定义多个同名的不同方法来实现,系统会根据参数(类型、个数、顺序)的不同来区分不 同方法。
3.抽象类:抽象类中通常只包含抽象方法(只有方法的声明,没有方法体),而方法的具体实现则由其派 生出的各子类来完成,这使得程序的功能描述和功能实现得以分离。此外,由于一个抽象类可派生多 个子类,因此,抽象类中的一个抽象方法可以在多个子类中有多种实现方式,这也实现了类的多态性
(1)抽象类的定义格式通常如下:
public abstract class Plane { //声明抽象类
private String shape; //声明成员变量
......
public abstract double area(); //声明抽象方法,注意:分号必不可少
......
}
(2)抽象类是不能实例化的,也就是说,不能基于抽象类来创建对象。
(3)抽象类中也可以含有普通成员变量和成员方法。但是,抽象方法只能出现在抽象类中。也就 是说,含有抽象方法的类必须是抽象类,非抽象类不能包含抽象方法。
4.接口:接口是由常量和抽象方法组成的特殊类。声明接口的一般格式如下:
[public] interface 接口名 [extends 父接口名列表]{
//常量声明
//抽象方法声明
}
接口与抽象类之间的关系:
(1)接口中只能定义常量和抽象方法,而抽象类中可以声明其他成员变量和成员方法;
(2)一个类同时只能继承一个抽象类,但可以同时实现多个接口;
(3)抽象类的继承用extends,接口的实现用implements。
转载于:https://blog.51cto.com/linyingkun/1637599