接口基础语法:
是一种引用数据类型;
接口是完全抽象的;
定义:【修饰符列表】 interface 接口名{}
接口支持多继承;接口也可以使用多态;
接口中只包含两部分:常量和抽象方法。
接口中所有元素都是public修饰的,但抽象方法定义时,public static 可以省略;
interface A{
//public abstract int sum();
int sum(int a,int b);}
接口中的常量,public static final可以省略
//double pi=3.1415926;与下面一样(在接口中,默认为常量,会自动添加public static final)
public static fina double pi=3.1415926;
当一个非抽象类实现(implements)接口的时候,必须将接口中的抽象方法重写(覆盖)。
一个类可以实现多个接口,弥补了Java中单继承的缺陷;
接口与接口之间也可以强转,即使没有关系;编译没问题,但运行可能会报错ClassCastException, 还是要加instanceof判断;(向下转型要有好习惯,加instanceof判断)
psvm{
A a=new C();
if(a instanceof B){
B b=(B)a;
}
}
interface A{void m1();}
interface B{void m2();}
class C implements A{
public void m1(){}
}
继承和实现同时存在:(先extends后implements)
class Bird extends Animals implements Fly{}
接口在开发中的作用:
接口在开发中的作用类似于多态在开发中的作用。(多态:面向抽象编程,降低程序的耦合度,提高扩展力)(OCT原则:对扩展开放,对修改关闭)
例如:小明去饭馆吃饭,这个过程中的接口是什么?
菜单是接口;小明面向菜单点菜(调用接口);厨师做菜(实现接口)。
菜单让顾客和厨师的耦合度降低,他们之间完全依靠“抽象的菜单”来沟通。
接口的使用离不开多态;
代码实例:(顾客点菜)
public class JieKouTest {
public static void main(String[] args) {
Menu ck=new ChinaCook();
Menu wk=new WesternCook();
Customer customer=new Customer(wk);//两者结合的重要代码
customer.order();
}
}
class ChinaCook implements Menu{
public void jiDan(){
System.out.println("中国鸡蛋");
}
public void tuDouSi(){
System.out.println("中国土豆丝");
}
}
class WesternCook implements Menu{
public void jiDan(){
System.out.println("西方鸡蛋");
}
public void tuDouSi(){
System.out.println("西方土豆丝");
}
}
interface Menu{
void jiDan();
void tuDouSi();
}
class Customer{
private Menu menu;
public void order(){
menu.jiDan();
}
public Menu getMenu() {
return menu;
}
public void setMenu(Menu menu) {
this.menu = menu;
}
public Customer() {
}
public Customer(Menu menu) {
this.menu = menu;
}
}