抽象类

不同于c++,java的函数调用时绑定都是用的动态绑定(late binding),除了final 或者 static的函数,所以一般java的多态通过函数重载就可以了。

java抽象类类似于c++的抽象类,即这个类我们不想去实例化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public abstract class Shapes {
public int x, y;
public int width, height;
public Shapes(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
abstract double getArea();
abstract double getPerimeter();
}
public class Circle extends Shapes {
public double r;
public double getArea() {
return (r * r * Math.PI);
}
public double getPerimeter() {
return (2 * Math.PI * r);
}
public Circle(int x, int y, int width, int heigh) {
super(x, y, width, heigh);
r = (double) width / 2.0;
}
}

抽象类使用一个abstract的关键字。抽象类可以包含也可以不包含abstract的方法,abstract方法类似于c++的纯虚函数,没有函数的具体实现。

抽象类可以派生子类,在抽象类派生的子类中必须实现抽象类中定义的所有抽象方法

抽象类从感觉上是介于接口和实体类之间的数据结构,只是在我们不想实例化这个类的时候使用。

接口

接口的关键字为interface.

  • 接口中的所有方法都是自动为public
  • 接口中的所有域都是statcifinal的,所以接口就成了一种很便捷的创建常量组的工具。
  • 接口是可以通过继承来扩展的

使用接口方便了多重继承,因为子类每次只能继承一个父类,但是能够实现多个接口。方便多重继承的,还有后面的内部类。