接口所有的方法都是抽象方法:所以在声明方法时,关键词abstract写不写都没有任何关系了。
接口的定义关键词是interface,抽象类是class。抽象类是用来继承大的,接口是用来实(implements)的。
匿名内部类
为什么要使用匿名内部类
先看看如果不使用匿名内部类的情形:
- 定义接口Shape(如果已经有则跳过)
public interface Shape {
public String getName();
public double area();
public double perimeter();
}
- 实现接口实现类Square
public class Square implements Shape {
public double d;
public Square(double d) {
this.d = d;
}
@Override
public String getName() {
return "正方形";
}
@Override
public double area() {
return d*d;
}
@Override
public double perimeter() {
return d*4;
}
}
- 定义Square类的对象并且去使用它
public class Test {
public static void main(String[] args){
Square square = new Square(5);
Shape shape = square;
print(shape);
Circular circular = new Circular(6);
Shape shape1 = circular;
print(shape1);
}
public static void print(Shape shape){
System.out.println(shape.getName()+"的周长是"+shape.perimeter()+"\n面积是"+shape.area());
}
}
那么如果使用匿名内部类呢?
(1)定义接口(与上一种情形一样)
(2)定义匿名内部类,并实现接口(实际上就是一种情形的第二三步骤合并了)。
匿名内部类显然简化了这个流程。但是也使得使用者理解更困难了,代码层次不是太清晰。