接口
我们都知道在Java中一个子类只能继承一个父类,这是Java的单继承特性,但在日常生活中,多继承问题在所难免,为了解决多继承的问题,Java引入了接口的概念。接口由关键字interface定义,语法如下:
[访问修饰符]interface 接口名 [extends 父接口1,父接口2---]
注意:
1.关于接口的访问修饰符,可以是public和缺省修饰符,如果省略public修饰符,系统默认使用缺省访问修饰符。
2.接口中只能定义共有的,静态的常量,并且这些常量默认都是共有的,静态的,终极的。
3.接口中的方法只能是共有的抽象方法,并且这些方法默认都是共有的,抽象的。
4.接口只能继承多个接口,接口不能继承类,也不能实现其他接口。
接口和抽象类的区别
相同点:
1.接口和抽象类都不能被实例化。
2.接口和抽象类都可以包含抽象方法。
不同点:
1.接口中只能包含抽象方法,而抽象类则完全可以包含普通方法。
2.接口中不能定义静态方法,而抽象类中可以定义静态方法。
3.接口只能定义静态常量,不能定义普通变量或非静态的常量,而抽象类中则可以定义不同的属性,也可以定义静态的属性。
4.接口中不包含构造器,而抽象类中可以包含构造器。
5.一个类最多只能有一个父类,包括抽象类,而一个类可以实现多个接口。
接口的实现
1.创建食物接口(Food),该接口被所有的食物类所实现。在该接口中定义getFood()方法。
package com.test;
public interface Food {
void getFood();
}
2.创建麦香鸡类(McChicken) ,该类实现Food接口,并重写Food接口的getFood)方法。
package com.test;
public class McChicken implements Food{
public void getFood() {
System.out.println("来一份麦辣鸡块");
}
}
3.创建薯条类(Chips) ,该类实现Food接口,并重写Food接口的getFood)方法。
package com.test;
public class Chips implements Food{
public void getFood() {
System.out.println("来一份薯条");
}
}
4.创建生产食品的工厂类(FoodFactory) ,在该类中定义静态方法createFood(String type)方法,在该方法中通过传入该方法参数的字符串值,判断用户需要何种食物,如果工厂中有该食物,则创建该食物对象,否则给出友好提示信息。
package com.test;
public class FoodFactory {
public static Food createFood(String type) {
if(type.equals("mcchicken")) {
return new McChicken();
}else if(type.equals("chips")) {
return new Chips();
}else {
System.out.println("对不起,没有该食物");
return null;
}
}
5.创建客户,在该类的主方法中通过食物工厂类创建客户需要的食物。
package com.test;
public class Test {
public static void main(String[] args) {
Food mcchicken=FoodFactory.createFood("mcchicken");
mcchicken.getFood();
Food chips=FoodFactory.createFood("chips");
chips.getFood();
}
}
运行结果如下: