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)…

猜你喜欢

转载自www.cnblogs.com/jing-yu/p/9061024.html