接口

1.接口(interface 关键字)

1.定义:

将抽象进行得更彻底,使所有方法都是抽象方法,所有方法都不提供具体的实现一种更为特殊的"抽象类"

2.格式:

/**
*定义一个接口
*/
public interface 接口名{
	//任意数量static final 常量
	//任意数量抽象方法
}

3.接口和类:

相似:

①接口不能被实例化;
②接口不包含任何构造器;
③接口中的所有方法都是抽象的;
④接口中不能包含实例成员变量。唯一可以出现在接口中的成员变量必须是同时声明为static和final;
⑤接口不能被一个类继承,只能被一个类来实现;
⑥一个接口能够继承多个接口。

区别:

接口不是类。虽然编写接口类似于编写一个类,但它们是两个不同的概念。类描述了对象的属性和行为,而接口包含了一个类需要实现的行为

4.接口具有的性质:

①接口默认是抽象的。在声明接口时,不需要使用关键字abstract;
②接口中的每一个方法默认也是抽象的,所以也不需要关键字abstract;
③接口中的方法默认访问级别是public。 在编写接口的时候通常用public关键字,但是如果我们不显式地将接口中的方法声明为public,它仍然将是public的。

高内聚低耦合

耦合:一个软件结构内不同模块之间互连程度的度量

低耦合比较好,如果耦合度高了,代码之间的联系比较高,一旦代码出现问题或者代码需要修改,那么需要一次性修改完

内聚:一个模块内各个元素彼此结合的紧密程度

高内聚是尽可能的让每个元素都紧密的相连。充分利用每一个元素的功能,各施所能,以最终实现某个功能,如果内聚度低了,说明代码还并不够完善

2.接口的实现:

格式:

/**
*使用接口
*/
public class A  implement 接口名字(多个用逗号隔开){}

作用:

实现接口的类必须实现接口里所有的方法
一个类可以实现多个接口

3.接口的应用

厨师和司机的示例:

/**
*Cooker 接口
*/
public interface Cooker {
	public void cooking();
	public void steamed();
}
/**
*Driver接口
*/
public interface Driver {
    public void driver();
}
/**
* Man类实现了接口Cooker Driver
*/
public class Man implements Cooker,Driver{
	public void driver() {
		System.out.println("我是老司机,我会开车");
	}
	public void cooking() {
		System.out.println("我是厨师,我会烹饪");
	}
	public void steamed() {
		System.out.println("我是厨师,我清蒸");
	}
}
/**
* 厨师类
*/
public class CookerLei {
	public void cook(Cooker c){
		c.cooking();
		c.steamed();
	}
}
/**
*司机类
*/
public class DriverLei {
	public void driving(Driver d){
		d.driver();
	}
}
/**
* 测试类
*/
public class Test {
	public static void main(String[] args) {
		DriverLei driverLei = new DriverLei();
		Man man = new Man();
		driverLei.driving(man);
		CookerLei cookerLei = new CookerLei();
		cookerLei.cook(man);
	}
}

4.接口的继承

一个接口能够继承另外的一个接口,类似于一个类能够继承另外一个类

关键字extends被用于继承接口,子接口继承了父接口中的方法

示例:

// B,C,D 是其他接口
public interface A extends B,C,D{}

在出现继承几个接口中拥有两个或者两个以上的抽象方法,保留一个即可

标记接口:一个没有任何方法的接口

5.接口多态:

示例:

/**
* 哺乳动物类
*/
public class Mammal {
	public void breathe() {
		System.out.println("哺乳动物在呼吸");
	}
}
/**
* Play接口
*/
public interface Play {
	public void playFetch();
	public void playCatch();
}
/**
* Dog类  继承了 哺乳动物类  实现了玩的接口
*/
public class Dog extends Mammal implements Play {
	public void playFetch() {
		System.out.println("狗正在追赶");
	}
	public void playCatch() {
		System.out.println("狗正在捕捉");
	}
	public void sleep() {
		System.out.println("狗正在睡觉");
	}
}
/**
*测试类
*/
public class Test {
	public static void main(String[] args) {
		Dog fido = new Dog();
		Mammal rover = new Dog();
		Play spot = new Dog();
		Object pooch = new Dog();
		fido.sleep();
	}
}

在测试类中可以看出
接口也遵循自动向上转型的形式 从而实现多态

6.接口和抽象类的区别

抽象类规范的是与生俱来的行为
接口规范的是扩展的行为
接口最大的作用是 降低耦合度

语法上:

1 接口:interface 抽象:abstract

2.接口不能放置构造器,实例成员,而抽象类可以放置

3.接口是通过implement实现方式,来完成抽象的实现

抽象类是通过实现extend继承的实现,来完成抽象的实现

4.抽象类中的所有抽象方法都必须采用 abstract来定义,在接口中默认的就是abstract

5.抽象类的父类是object, 接口的父类不知道

6.抽象类可以实现接口 , 接口不能继承抽象类

7.抽象类只能单继承 接口可以多继承

使用上:

接口和抽象类都可以定义抽象方法,但是抽象类中描述的是类与生俱来的方法,而接口中的抽象方法事外
部扩展给类的方法

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值