抽象类
没有实现的方法我们称为抽象方法(abstract method),包含抽象方法的类我们称为抽象类(abstract class)。
abstract class Shape {
abstract public void draw();
}
在 draw
方法前加上 abstract 关键字, 表示这是一个抽象方法. 同时抽象方法没有方法体,不能执行具体代码。
对于包含抽象方法的类, 必须加上 abstract 关键字表示这是一个抽象类。
抽象类可以包含抽象方法,也可以包含非抽象方法。
抽象类不可以被实例化
不能 Shape shape = new Shape();
一个普通的类如果继承了抽象类,那么一定要重写抽象类的抽象方法
abstract class Shape{
public abstract void draw();
}
class Cycle extends Shape{
@override
public void draw(){
System.out.println("画圆");
}
}
抽象类A可以继承抽象类B,这样一来,就不需要重写抽象方法
abstract class A extends B{
}
抽象方法一定不能是private,抽象类不能被final修饰。
如果一个普通类C继承了上述的抽象类A,如果抽象类A没有重写抽象类B的抽象方法,那么当前的普通类C一定要重写。
abstract class B{
public abstract void draw();
}
abstract class A extends B{
}
class C extends A{
@override
public void draw(){
}
}
接口
Java用关键字 interface来创建接口
implements 用于接口的实现
一个类可以实现多个接口
class A implements IRunning,ISwimming......{
}
抽象类是可以实现接口的
接口和接口之间是不能实现的,但是它们之间可以继承
interface C extends B,A{
}//B 和 A均为接口
接口当中的方法一定不能有具体的实现
interface A{
int a = 10;//默认 public static final int a = 10;
void draw();//默认 public abstract void draw();
}
抽象类和接口的区别
区别 | 抽象类 abstract | 接口 interface |
---|---|---|
结构组成 | 普通类+抽象方法 | 抽象方法+全局变量 |
权限 | 各种权限 | public |
子类使用 | 使用extends关键字继承抽象类 | 使用implement关键字实现接口 |
关系 | 一个抽象类可以实现若干接口 | 接口不可以继承抽象类,但接口可以使用extends关键字继承多个父接口 |
子类限制 | 一个子类只能继承一个抽象类 | 一个子类可以实现多个接口 |