接口的基础语法和接口在开发中的作用2021-07-23java学习日记

Javase进阶 接口的语法和接口的作用

p499-p516
关键词: 接口    implements    面向抽象编程    OCP开闭原则

接口的基础语法

1、接口也是一种引用数据类型,编译之后也是一个class字节码文件
2、接口是完全抽象的。(抽象类是半抽象。)
也可以理解为是特殊的,完全抽象的类
3、接口怎么定义,语法是什么?
[修饰符列表] interface 接口名{}
4、接口和接口之间支持多继承,一个接口可以继承多个接口。
例如 interface C extends A,B也没问题,不会报错
5、接口中只包含两部分
常量和抽象方法
接口中没有其他内容了,只有以上两部分
6、接口中所有的元素都是public修饰的。(都是公开的)
7、接口中的抽象方法定义时:public abstract可以省略
8、接口中的常量的public static final 可以省略
9、接口中的方法都是抽象方法,因此接口中的方法不能有方法体
10、类和类叫继承,类和接口之间叫做实现
继承用extends关键字完成 实现用implements关键字完成
11、当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现(覆盖/重写)。
12、一个类可以同时实现多个接口
这种机制弥补了java中类和类只能单继承,但是也一定要将所有接口的抽象方法都进行实现。
13、接口和接口之间在进行强制类型转换时候,没有继承关系,也可以强转。编译器可以通过
但是注意java.lang.ClassCastEception转之前也用if+instanceof来判断(这点可以不用太在意)
14、继承和实现懂存在的话,extends关键字在前,implements接口在后
15、使用接口,写代码的时候,可以使用多态(父类型引用指向子类型对象)
例:
class Cat extends Animal implements Flyable 根据这种写法
练习了个小例子,里面也用了多态

public class Test {
    public static void main(String[] args) {
        //多态
        Flyable c = new Cat();
        c.fly();
        Flyable p = new Pig();
        p.fly();
        Flyable f = new Fish();
        f.fly();
    }
}
class Animal{

}

interface Flyable{
    void fly();
}

class Cat extends Animal implements Flyable{
    public void fly(){
        System.out.println("会飞的猫,天猫!");
    }
}

class Pig extends Animal implements Flyable{
    public void fly(){
        System.out.println("我是飞天小猪猪");
    }
}
class Fish extends Animal implements Flyable{
    public void fly(){
        System.out.println("我是六眼飞鱼");
    }
}


接口在开发中的作用

注意:接口在开发中的作用,类似多态在开发中的作用
多态:面向抽象编程,不要面向具

接口是不是完全抽象的?

是的而我们以后正好要求,面向抽象编程。
面向冲向编程这句话可以修改为:面向接口编程。
面向接口就有了可插拔,可插拔表示扩展力很强。不是焊接死的
例:
接口在现实世界中是不是到处都是那?
螺栓和螺母之间有接口
灯泡和灯口之间有接口
笔记本电脑和键盘之间有接口(usb接口,usb接口是不是某个计算机协会制定的规范?)
接口有什么用?扩展性,可插拔。
接口是一个抽象的概念。

分析:

中午去饭馆吃饭,这个过程中有接口吗?
接口是抽象的
菜单是一个接口。(菜单上面有一个抽象的照片:西红柿炒蛋)
谁面向接口调用。(顾客面向菜单点菜,调用接口)
谁负责实现这个接口。(后台厨师负责把西红柿炒蛋做好!是接口的实现者)
这个接口有什么用呢?
这个饭馆的菜单,让顾客和后厨解耦合了。
顾客不用找后厨,后厨不用找顾客,他们完全通过这个抽象的菜单沟通。
对于上面的话,写一个接口实现的作用的例子:

// 顾客
public class Customer{
	// 顾客手里有一个菜单
	// Customer has a FoodMenu!(这句话什么意思:顾客有一个菜单)
	// 记住:以后凡是能够使用 has a 来描述的,统一以属性的方式存在。
	// 实例变量,属性
	// 面向抽象编程,面向接口编程。降低程序的耦合度,提高程序的扩展力。
	private FoodMenu foodMenu; 
	
	// 如果以下这样写,就表示写死了(焊接了。没有可插拔了。)
	// 中餐厨师
	//ChinaCooker cc;

	// 西餐厨师
	//AmericCooker ac

	// 构造方法
	public Customer(){
	}
	public Customer(FoodMenu foodMenu){
		this.foodMenu = foodMenu;
	}

	// setter and getter
	public void setFoodMenu(FoodMenu foodMenu){
		this.foodMenu = foodMenu;
	}
	public FoodMenu getFoodMenu(){
		return foodMenu;
	}

	// 提供一个点菜的方法
	public void order(){
		// 先拿到菜单才能点菜
		// 调用get方法拿菜单。
		//FoodMenu fm = this.getFoodMenu();
		// 也可以不调用get方法,因为在本类中私有的属性是可以访问
		foodMenu.shiZiChaoJiDan();
		foodMenu.yuXiangRouSi();
	}
}

/*
	接口:菜单,抽象的
*/
public interface FoodMenu{

	// 西红柿炒蛋
	void shiZiChaoJiDan();

	// 鱼香肉丝
	void yuXiangRouSi();

}
//中餐厨师
// 实现菜单上的菜
// 厨师是接口的实现者。
public class ChinaCooker implements FoodMenu{

	// 西红柿炒蛋
	public void shiZiChaoJiDan(){
		System.out.println("中餐师傅做的西红柿炒鸡蛋,东北口味!");
	}

	// 鱼香肉丝
	public void yuXiangRouSi(){
		System.out.println("中餐师傅做的鱼香肉丝,东北口味!");
	}
}
//西餐厨师
// 实现菜单上的菜
// 厨师是接口的实现者。
public class AmericCooker implements FoodMenu{

	// 西红柿炒蛋
	public void shiZiChaoJiDan(){
		System.out.println("西餐师傅做的西红柿炒鸡蛋!");
	}

	// 鱼香肉丝
	public void yuXiangRouSi(){
		System.out.println("西餐师傅做的鱼香肉丝!");
	}
}
public class Test{
	public static void main(String[] args){

		// 创建厨师对象
		//FoodMenu cooker1 = new ChinaCooker();
		FoodMenu cooker1 = new AmericCooker();

		// 创建顾客对象
		Customer customer = new Customer(cooker1);

		// 顾客点菜
		customer.order();
	}
}
总结一句话:三个字“解耦合”

面向接口编程,可以降低程序的耦合度,提高程序的扩展力。符合OCP开发原则。
接口的使用离不开多态机制。(接口+多态才可以达到降低耦合度。)

接口可以解耦合,解开的是谁和谁的耦合!!!
任何一个接口都有调用者和实现者。
接口可以将调用者和实现者解耦合。
调用者面向接口调用。
实现者面向接口编写实现。

以后进行大项目的开发,一般都是将项目分离成一个模块一个模块的,
模块和模块之间采用接口衔接。降低耦合度。

对于Is a 、 has a、 like a

Is a :extends
Cat is an Animal 猫是一个动物
凡是能够满足is a 的表示 继承关系

has a :
I have a pen
凡是能够满足have a 关系的表示关联关系
关联关系通常以属性的形式存在。
like a :implements
Cooker like a FoodMenu(厨师像一个菜单一样)
凡是能够满足like a关系的表示实现关系
实现关系通常是:类实现接口

抽象类和接口有什么区别?

在这里我们只说一下抽象类和接口在语法上面的区别
至于以后抽象类和接口应该怎么进行选择,通过以后项目去学习和体会。
抽象类是半抽象的。
接口是完全抽象的。

抽象类中有构造方法。
接口类中没有构造方法。

接口和接口之间支持多继承。
类和类之间只能单继承。

一个类可以同时实现多个接口
一个抽象类只能继承一个类

接口中只允许出现常量和抽象方法。
这里透露一个信息:
以后接口比抽象类多,一半抽象类的使用还是少。
接口一般是对行为的抽象

今日心得总结

今天刚从老家回来,坐了七个小时的车,回来还是坚持学习到现在,然后发布这篇文章,真的有点小累,但是没事,坚持,坚持才是胜利!!
少年易老学难成,一寸光阴不可轻。
绳锯木断,水滴石穿。
长风破浪会有时,直挂云帆济沧海!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值