一、 JAVA抽象类
- 抽象方法
什么是抽象方法
抽象方法是出现在基类中的一种方法,但要求在派生类中被重写
抽象方法的特点
①. 一个抽象方法只有方法头,没有方法主体。访问修饰符 abstract 返回类型方法名(参数列表);如:public abstract void getArea();
②. 抽象方法被用来确保派生类会实现这个方法。
2. 抽象类
什么是抽象类
若类含有抽象方法,则类必须以abstract关键字声明为抽象类。
public abstract class 类名
抽象类的特点
①. 抽象类可以含零至多个普通方法,也可以含零至多个抽象方法。
②. 不论抽象类是否含抽象方法,都不允许实例化,即不能创建抽象类的对象,它只能作为其他类的基类。
③. 若父类是抽象类,且子类不想成为抽象类,则子类必须将父类中的所有抽象方法重写为带方法体的普通方法,否则子类仍必须是抽象类。
二、 JAVA接口
1. 什么是接口
接口定义的通用格式:
public interface 接口名称
{
(方法头...)
}
2. 接口的特点
①. 接口中的所有方法都是public,抽象方法,和“所有方法都是抽象方法的抽象类”非常类似,它同样不能被实例化, 而且在接口中所列的所有方法必须在别处被重写。
②. 一个类可以实现一个或者多个接口,如果一个类要实现接口,它需要在类头中使用implements 关键字。
实现一个接口:
public class RubberDuck extends Duck implements Quackable
实现多个接口:
当一个类实现多个接口,它必须实现所有接口中的方法。
为了在类定义中说明实现多个接口,需要写上关键字implements,并列出接口的名字,接口名之间用逗号分隔。
public class MyClass implements Interface1,Interface2,Interface3
③. 在接口中的所有属性都为 public、final 和 static。因为他们会自动地变为 final, 所以你必须为它们提供初始化值。在下面这个接口中, FIELD1 和 FIELD2 是 public final static int 变量。 任何实现这个接口的类都可以访问这些变量
public interface Doable{
int FIELD1 = 1, FIELD2 = 2;
(Method headers...)
}
④. 接口的继承性:接口只能继承接口,而不能继承类。与类只能继承一个父类不同,接口可以继承多个父接口,彼此以逗号隔开(各父接口的顺序可任意),表达的逻辑是子接口既是一种父接口1,也是一种父接口2
public interface 接口名 extends 父接口1,父接口2...
{
//字段和抽象方法
}
三、抽象类与接口的异同点
相同点:
1. 接口和“所有方法都是抽象方法的抽象类”非常类似,接口本身同样不能被实例化,而且在接口中所列的所有方法必须在别处被重写。
2. 接口和抽象类都可以被继承
不同点:
1. 抽象类中可以有抽象方法和普通方法,子类可以直接继承调用其普通方法;接口中只能有抽象方法,需要子类具体实现
2. 抽象类中的方法和属性可以是private、public或者protected,没有限制;而接口中的所有属性都为 public、final 和 static且方法必须为public。
3. 抽象类的关键字是abstract class,接口的关键字是interface
4. 抽象类只能被类和抽象类继承,且不能被实例化;接口既可以被类和抽象类继承,也可以被接口继承,且接口需要被具体的类继承和实现
5. 抽象类不支持多继承,只能单继承;接口支持多继承。