抽象类
定义
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。简单来说,使用关键字 abstract 修饰的类就叫做抽象类。
抽象类使用
示例代码,如下:
abstract class AbstractAnimal {
public AbstractAnimal() {
System.out.println("Init AbstractAnimal.");
}
static String name = "AbstractAnimal";
public abstract void eat();
public void run() {
System.out.println("AbstractAnimal Run.");
}
}
class Animal extends AbstractAnimal {
public static void main(String[] args) {
AbstractAnimal animal = new Animal();
animal.run();
System.out.println(animal.name);
animal.eat();
}
// 必须重写抽象父类方法
@Override
public void eat() {
System.out.println("Animal Eat.");
}
}
以上代码执行的结果:
Init AbstractAnimal.
AbstractAnimal Run.
AbstractAnimal
Animal Eat.
抽象方法
使用 abstract 关键字修饰的方法叫做抽象方法,抽象方法仅有声明没有方法体。如下代码:
public abstract void m();
抽象类的特性
- 抽象类不能被初始化
- 抽象类可以有构造方法
- 抽象类的子类如果为普通类,则必须重写抽象类中的所有抽象方法
- 抽象类中的方法可以是抽象方法或普通方法
- 一个类中如果包含了一个抽象方法,这个类必须是抽象类
-子类中的抽象方法不能与父类中的抽象方法同名
-抽象方法不能为 private、static、final 等关键字修饰
-抽象类中可以包含普通成员变量,访问类型可以任意指定,也可以使用静态变量(static)
接口
定义
接口(interface)是抽象类的延伸,它允许一个类可以实现多个接口,弥补了抽象类不能多继承的缺陷,接口是对类的描述,使用 interface 关键字来声明。
接口使用
示例代码,如下:
interface IAnimal {
void run();
}
class AnimalImpl implements IAnimal {
public static void main(String[] args) {
IAnimal animal = new AnimalImpl();
animal.run();
}
@Override
public void run() {
System.out.println("AnimalImpl Run.");
}
}
Java 8 中接口的改动
1)接口中增加了 default 方法和 static 方法,可以有方法体
示例代码,如下:
网友评论