接口
1、接口也是一种“引用数据类型,编译之后也是一个单独的字节码文件。目的也是为了降低程序耦合度,提升程序扩展力,面向抽象编程。
2、接口是完全抽象的(对比是抽象类是半抽象的),接口是特殊的抽象类。
3、接口提取的通常是动作行为,对行为的抽象。使用的比抽象类多。
4、接口只能包含两部分的内容:常量和抽象方法。
5、接口中所有元素都是Public修饰的,所以抽象方法语法可以简化为“返回值类型 方法名();",常量语法由“public static final 数据类型 数据名”简化为“数据类型 数据名”。
6、类和类之间继承extends,接口和类之间实现implement,但依然可以把实现看做继承。
7、抽象类和非抽象类都可以实现接口,但非抽象类实现(重写/覆盖)接口时要实现所有抽象方法。由于接口内方法都是公共的,且鉴于“重写之后的方法访问权限不能更低”,实现的方法要写出定义public。
8、接口也能实现多态,由于接口是完全抽象的,且目标是面向抽象编程,所以也可称之为面向接口编程。
public class test {
public static void main(String[] args) {
Menu cook = new ChineseCook();//创建厨师对象,父类型引用指向子类型对象,接口的多态化。
Customer customer = new Customer(cook);//创建顾客对象,将cook传进去。
customer.orderPlate();
}
}
class Customer{
//ChineseCook a这样写就直接写死了
private Menu menu;//记得封装
public Customer() {
}
public Customer(Menu menu) {
this.menu = menu;
}
public Menu getMenu() {
return menu;
}
public void setMenu(Menu menu) {
this.menu = menu;
}
public void orderPlate(){
Menu m = this.getMenu();
m.beaf();
m.pork();
}
}
interface Menu{
void beaf();
void pork();
}
class ChineseCook implements Menu{
public void beaf(){
System.out.println("ChineseCook is working on beaf");
}
public void pork(){
System.out.println("ChineseCook is working on pork");
}
}
class WesternCook implements Menu{
public void beaf(){
System.out.println("WesternCook is working on beaf");
}
public void pork(){
System.out.println("WesternCook is working on pork");
}
}
9、接口和接口之间能实现多继承。
10、一个类能实现多个接口。弥补了Java中只能单继承的缺陷。
public class test {
public static void main(String[] args) {
vehicle a = new car();//父类型引用指向子类型对象。
a.move();
}
}
interface vehicle {
void move();//接口的方法名前缀一定是public abstract,并且可以省略。
}
interface laws{
int limitSpeed = 90;
}
class car implements vehicle,laws{//实现多个接口
public void move() {
System.out.println("moving under "+limitSpeed+"km/h");
}
}
11、接口和接口进行强制类型转换的时候,不要求一定要有继承关系,可以过编译关,但运行可能异常ClassCastException。此时还是老样子,用instanceof运算符进行判断。
12、继承和实现可以同时实现,extends关键词在前,implement关键词在后。