抽象类是半抽象,接口是完全抽象。
类与类之间叫继承,关键字extends
类与接口叫实现(可以看做继承),关键字implements
基础语法:修饰符列表 interface 接口名()
接口支持多继承,一个接口可以继承多个接口。
一个非抽象类实现接口必须实现所有方法。
使用接口时可以使用多态(父类型引用指向子类型对象)
接口包含两部分内容:常量,抽象方法(没有方法体)。没有其他的了。
接口中所有的元素都是public公开的。public abstract和final可以省略。但是子类中public不能省略(继承的方法的访问权限只能更高不能低)
继承与实现(接口)在一起怎么写:
eg:class 猫extends动物implements翅膀,创建对象时用翅膀(接口)创建。
eg:class蛇extends动物,不用翅膀(虽然没有extends,也是有的默认继承object)
接口在开发中的作用(类似多态:面向抽象编程)
接口正好完全抽象,面向抽象编程也可以修改为面向接口编程。(接口可插拔,高扩展低耦合)
eg:吃饭,菜单是一个接口(菜单上有菜的抽象照片),顾客面向接口调用(顾客点菜),厨师负责实现这个接口(把菜做好)。
顾客不需要找厨师,只要通过抽象的菜单就能与厨师沟通。
public class test01 {
public static void main(String[] args) {
FoodMenu cooker1=new UsaCooker();//ChinaCooker();想吃中餐只需换一个单词
Customer customer=new Customer(cooker1);
customer.order();
}
}
interface FoodMenu{
void chaodan();
void rousi();
}
/*厨师是接口的实现者*/
class ChinaCooker implements FoodMenu{
public void chaodan(){
System.out.println("中餐厨师做的炒蛋");
}
public void rousi(){
System.out.println("中餐厨师做的鱼香肉丝");
}
}
class UsaCooker implements FoodMenu{
public void chaodan(){
System.out.println("西餐厨师做的炒蛋");
}
public void rousi(){
System.out.println("西餐厨师做的鱼香肉丝");
}
}
/*顾客有一个菜单*/
class Customer{
private FoodMenu foodMenu;
public Customer() {
}
public Customer(FoodMenu foodMenu) {
this.foodMenu = foodMenu;
}
public FoodMenu getFoodMenu() {
return foodMenu;
}
public void setFoodMenu(FoodMenu foodMenu) {
this.foodMenu = foodMenu;
}
public void order(){//点菜
//FoodMenu f=this.getFoodMenu();//拿到菜单
//也可以不调用,本类中的私有属性可以直接访问
foodMenu.chaodan();
foodMenu.rousi();
}
}
抽象类与接口的区别
抽象类:半抽象,有构造方法,单继承
接口:完全抽象,无构造方法,多继承,只允许出现常量和抽象方法。
一个类可以实现多个接口,一个抽象类只能继承一个类。