java基础知识十三
第十三章
- 抽象类
Java可定义不含方法体的方法,其方法体由子类根据具体情况实现,这样的方法称为抽象方法(abstract method),包含抽象方法的类必须是抽象类(abstract class)。
抽象方法:使用abstract定义的方法或者来自接口定义的方法。
只有实例方法可以声明为抽象方法。
一个类C如果满足下面的任一条件,则该类包含抽象方法且是抽象类:
类C显式地进行一个抽象方法的声明;
类C的父类中声明的抽象方法未在类C和它的父类中实现;
类C的接口中声明一个方法,并且类C未实现该方法。
只要类C有一个未实现的方法,类C就是抽象类
抽象类不能被实例化,即不能用new关键字创建对象。
抽象类可以定义构造函数,并可以被子类调用。
抽象类可以用于定义变量、函数参数和函数返回值,但他们只能用具体子类的对象实例化。
抽象类的父类可以是具体类:因为抽象类自己引入了抽象方法。例如,具体类Object是所有类的祖先父类。
- 接口
接口是公共静态常量、方法和公共抽象、默认实例方法的集合。接口是能力、规范、协议的反映。接口中的一切都默认是public的,没有修饰符的方法默认是abstract的,数据成员默认是static的
接口不是类(final类Math有私有构造函数和具体方法):
(1)接口不能定义构造函数;
(2)一个接口可继承extends多个接口;
(3)接口不能被类继承extends;
(4)一个类可实现implements多个接口。
不同的接口可以定义同名的静态方法,这些接口的同名静态方法可以继承到某个新接口中,并且新接口也可以定义同名的静态方法。访问静态方法使用“接口名.”,因而它们之间是可区分的
- Comparable接口
public class ComparableRectangle extends Rectangle implements Comparable { /** Construct a ComparableRectangle with specified properties */ public ComparableRectangle(double width, double height) { super(width, height); } /** Implement the compareTo method defined in Comparable */ public int compareTo(Object o) { if (getArea( ) >((ComparableRectangle)o).getArea()) return 1; else if (getArea( ) <((ComparableRectangle)o).getArea()) return -1; else return 0; } }
对于ComparableRectangle的两个对象r1和r2,直接调用Max.max(r1,r2)找出最大的对象
对于实现了Comparable接口任何类的二个对象(不管其具体实现是什么)a1和a2,都可以调用Max.max(a1,a2)找出最大的对象
- Cloneable接口
Clone用于防止一个变量引用的块被其它引用变量引用。
Java定义了Cloneable接口,任何想克隆的类必须实现该接口,同时覆盖从Object类继承的clone方法,并将访问属性改为public
Cloneable接口为空接口(未定义任何函数),其定义为
package java.lang;
public interface Cloneable { }
空接口称为标记接口(markup interface)
空接口有什么作用?允许你用instanceof检查对象能否被clone:
if(obj instanceof Cloneable)…