抽象类:
·抽象类就是专门设计用来让子类继承的类,用abstract修饰。
·抽象类提供一个类的部分实现,其内部可以有成员变量、构造方法、具体方法和抽象方法。抽象类包含的抽象方法以分号结束,且不含方法体,它是必须被子类覆盖的方法。
·格式:
abstract class<类名>{
成员变量;
返回类型 方法名(参数列表){方法体} //定义一般方法
abstract 返回类型 方法名(参数列表); //定义抽象方法
}
·注意点:
(1)抽象类可以只包含抽象方法,也可以拥有普通的成员变量或方法。抽象类的子类必须覆盖父类的所有抽象方法。
(2)如果一个类不是抽象类,就不能在该类中定义抽象方法(抽象方法只能定义在抽象类中)。
(3)抽象类可以有构造方法,但抽象类不会有实例,也不能直接用构造方法来生成实例,一般可通过其子类进行实例化。
(4)抽象方法只定义方法声明,不定义方法实现。
(5)抽象类中可以定义非抽象方法,也可以不定义抽象方法。
(6)对于类,不能同时用final和abstract说明;对于成员方法,不能同时用static和abstract说明。
使用final关键字的类不能被继承;使用static关键字的方法能在不实例化对象时就被使用,而使用abstract关键字的方法 没有方法体,必须要靠子类进行具体实现。
(7)abstract与final、private、static不共存。
·
接口:
·接口是在程序开发的早期建立的一组协议(规范公共的操作接口),它没有被具体实现。通过关键字interface可以指定一个接口必须做什么,而不是规定它如何去做。在接口中定义的方法是不含方法体的,一旦接口被定义,任何类成员都可以实现该接口。
·在Java语言中,一个类只能有一个父类。但Java提供了接口用于实现多重继承,一个类可以有一个父类,并能实现多个接口。接口是一个特殊的类:由常量和抽象方法组成。
·格式:
[public] interface 接口名 [extends父接口名列表]{ 数据类型 变量名=常量值; //常量域声明 返回类型 方法名(参数列表)[throw异常列表]; //抽象方法声明 }
·注意点:
(1)接口具有继承性,一个接口还可以继承多个父接口,父接口间用逗号分隔;
(2)系统默认接口中所有成员变量的修饰都是加上public、static和final。
double PI=3.1415926; 完全等同于: public static final double PI=3.1415926;
(3)系统默认接口中所有成员方法的修饰都是public和abstract。
void testA(); 完全等同于: public abstract void testA();
(4)接口中只包含常量定义和抽象方法。
(5)接口本身具有抽象属性,因此不需要使用abstract关键字,接口的访问控制权限有public和默认权限,不具有protected和private权限。
(6)接口不含构造方法。
·
小结:
·抽象类是对根源的抽象;接口是对动作的抽象。
·不定义任何变量并无须给出任何方法的完整定义,考虑接口;
必须有具体的方法定义或变量时,考虑抽象类。
·