Java——接口及其作用

接口——接口的由来:当一个抽象类中 所有的函数都是抽象的时候,那么我们就可以将这个抽象类
    用另外一种表现形式-接口
    在JDK7之前 接口中是不可以定义具体函数的 
    在JDK8以后 接口中是可以定义具体函数的(必须是静态的函数 成员函数还是依旧默认抽象的)
    对于接口而言 里面的函数 变量
    所有的接口变量:
    public static final xxx xxx
    所有的函数:
    public abstract xxx xxx
    
    类与类之间是什么关系
        单继承 一个类只能且只有一个父类
    
    接口与类之间是什么关系
        实现关系
        一个类可以实现多个接口 implements
    
    接口与接口之间是什么关系
        不可能是实现关系implements
        只能是继承关系-多继承
        
    为什么类与类之间不能多继承?
    为什么接口与接口之间可以多继承?
    
    本质就看 函数是否有函数体!

具体的代码实现:

package com.day.test01;


	public class InterfaceDemo01 {
		public static void main(String[] args) {
			Demo4 d4=new Demo4();
			System.out.println(d4.age);
			d4.show();
			//d4.haha();//调用不到接口的静态函数 
			interfaceA.haha();//只能通过接口调用静态函数
		}
	}
	interface interfaceA{
		int age=10;	//public static final int age=10;
		void show();//public abstract void show();
		//只能是通过接口调用 不会继承给子类
		public static void haha(){
			System.out.println("哈哈");
		}
	}
	class Demo4 implements interfaceA{
		@Override
		public void show() {
			System.out.println("Demo04 show....");
		}
	}
	interface interfaceB{
		void show();
	}
	interface interfaceC{
		void haha();
	}
	/*
	一个类可以多现实多个接口=其实就是相当于继承多个抽象类
	本质上还是子类与父类的关系 只不过在接口这里 一个类可以有多个接口爸爸
	当一个类想要实现一个接口的时候  有两个选择
	1.重写接口中的函数
	2.该类定义成抽象即可
	*/
	class Demo1 implements interfaceB,interfaceC{
		@Override
		public void haha() {
			
		}
		@Override
		public void show() {
			
		}
	}
	//The type Demo must implement the inherited abstract method interfaceC.haha()
	abstract class Demo2 implements interfaceB,interfaceC{
		/*
		public abstract void show();
		public abstract void haha();
		*/
	}

	interface interfaceD{	
		void happyLife();	//你爷爷希望你生活美好
		public static void show(){
			System.out.println("D show...");
		}
	}
	interface interfaceE{
		void happyLife();	//你奶奶希望你生活美好
		public static void show(){
			System.out.println("F show...");
		}
	}
	//继承到的是属性 抽象函数 但是没有静态函数的继承
	interface interfaceF extends interfaceD,interfaceE{
		//你爸爸希望你生活美好
	}
	class Demo3 implements interfaceF{

		@Override
		public void happyLife() {
			
		}
		
	}

 常用的三个接口:Comparable、Iterable、Serializable

package part01.接口;
//第一个作用:在后期对类的功能进行扩展,这些功能并不是该类原先所具有的功能!
//这样子的话 就避免了继承带来的一些弊端 只能单继承
/*
Java当中最常用的三个接口 内置的接口
	Comparable 比较接口 给我们的类提供比较的功能
		 int compareTo(T o); 按照自然顺序进行比较
		 String.compareTo()
	Iterable 可迭代接口 可以将我们该类的对象用于foreach循环
	Serializable 序列化接口 我们可以将该对象的数据写出去
		对象的数据在内存中 如何将内存中的数据写出去(硬盘 网络)
		想要把内存中的数据提取 就得实现序列化接口
*/
public class InterfaceDemo02 {
	public static void main(String[] args) {
		String s="abc";
	}
}
//缉毒 导盲 防爆
interface 缉毒{
	void jidu();
}
class Dog implements 缉毒{

	@Override
	public void jidu() {
		System.out.println("可以去缉毒了!");
	}
	
}
class Bird{
	void fly(){}
}
interface 飞行{
	void fly();
}
class Person implements 飞行{

	@Override
	public void fly() {
		System.out.println("人可以飞了....");
	}
}

接口的作用:

package part01.接口;
//第二作用:向外提供统一的规范
//接口的出现 一定程度上对我们的代码设计进行了解耦
//耦合性-两只之间的联系
public class InterfaceDemo03 {
	public static void main(String[] args) {
		Computer computer=new Computer();
		Mouse mouse=new Mouse();
		KeyBoard keyBoard=new KeyBoard();
		MobileHard mobileHard=new MobileHard();
		computer.getUSBConnect(mouse);
		computer.getUSBConnect(keyBoard);
		computer.getUSBConnect(mobileHard);
	}
}
class Computer{
	public void getUSBConnect(USB device){
		device.doSomething();
	}
}
interface USB{
	void doSomething();
}
class Mouse implements USB{
	@Override
	public void doSomething() {
		System.out.println("鼠标:提供坐标的访问和控制。。。。");
	}
}
class KeyBoard implements USB{
	@Override
	public void doSomething() {
		System.out.println("键盘:提供数据的输入。。。。");
	}
}
class MobileHard implements USB{
	@Override
	public void doSomething() {
		System.out.println("移动硬盘:提供外部存储。。。。");
	}
}
package com.day.test01;

//第三个作用:传递代码 和第二个很像
public class InterfaceDemo04 {
	public static void main(String[] args) {
		Button loginButton=new Button();
		Button registButton=new Button();
		Button downloadButton=new Button();
		//匿名实现子类的匿名对象
		//避免了在编译期间所生成的大量备选的类字节码
		//在程序运行期间 需要用到了 再去创建实现子类和其对象即可
		/*
		 	实现子类的匿名对象 之所以写Mission的原因就在于我们要确定子类是谁的实现子类
			new Mission()
			匿名实现子类
			{
				public void doTask() {
					System.out.println("登录功能......");
				};
			}
		 */
		//了解Android开发-增加知识量  为了毕设
		loginButton.doSometing(new /*LoginMission()
			class LoginMission implements*/ Mission(){
				@Override
				public void doTask() {
					System.out.println("登录功能......");
				}
			}
		);
		
		registButton.doSometing(new Mission(){
				public void doTask() {
					System.out.println("注册功能......");
				};
			}
		);
		downloadButton.doSometing(new Mission(){
			public void doTask() {
				System.out.println("下载功能......");
			};
		});
	}
}
//按钮---任务 分开看
interface Mission{
	//任务的具体内容
	public void doTask();
}
class Button{
	//当用户点击该按钮的时候 应该触发的一些事情
	//每一个按钮对象的任务不同 此处无法决定具体的代码
	public void doSometing(Mission mission){
		mission.doTask();
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值