前言
接口和抽象类提供了一种将接口与实现拆散的更加结构化的办法。
抽象类
Java 提供了一个叫做形象办法的机制,这个办法是不残缺的:它只有申明没有办法体。上面是形象办法的申明语法:
abstract void f();
蕴含形象办法的类叫做抽象类。如果一个类蕴含一个或多个形象办法,那么类自身也必须限定为形象的,否则,编译器会报错。
abstract class User {abstract void f();
}
创立抽象类和形象办法使得类的抽象性很明确,并能告知用户和编译器应用用意。抽象类同时也是一种有用的重构工具,应用它们使得咱们很容易地将沿着继承层级构造上移公共办法。
接口
应用 interface 关键字创立接口。
public interface User {void f();
}
- 多继承
Java 只能继承自一个类(或抽象类),但能够实现任意多个接口。因为接口中不容许存在属性(只有动态属性,不实用),所以属性依然只会来自单个基类或抽象类,也就是说,不会存在状态的多继承。
// 多继承
interface One {default void first() {System.out.println("first");
}
}
interface Two {default void second() {System.out.println("second");
}
}
interface Three {default void third() {System.out.println("third");
}
}
class MI implements One, Two, Three {}
抽象类和接口
在理论开发中抉择用抽象类还是用接口是一件令人困惑的事件,抽象类依然是一个类,在创立新类时只能继承它一个。而创立类的过程中能够实现多个接口。下表做了明确的辨别:
个性 | 接口 | 抽象类 |
---|---|---|
组合 | 新类能够组合多个接口 | 只能继承繁多抽象类 |
状态 | 不能蕴含属性(除了动态属性,不反对对象状态) | 能够蕴含属性,非形象办法可能援用这些属性 |
默认办法 和 形象办法 | 不须要在子类中实现默认办法。默认办法能够援用其余接口的办法 | 必须在子类中实现形象办法 |
结构器 | 没有结构器 | 能够有结构器 |
可见性 | 隐式 public | 能够是 protected 或友元 |
总结
认为接口是好的抉择,从而应用接口不必具体类,这具备诱惑性。简直任何时候,创立类都能够代替为创立一个接口。失当的准则是优先应用类而不是接口。从类开始,如果应用接口的必要性变得很明确,那么就重构。接口是一个平凡的工具,但它们容易被滥用。
最初的最初
为初学者提供学习指南,为从业者提供参考价值。我深信码农也具备产生洞见的能力。扫描下图二维码关注,学习和交换!