java--接口

因为java不支持类的多继承,所以就有了接口,接口是方法特征的集合

定义接口的规则

  • 接口被关键字interface修饰
  • 接口的成员变量都是public static final 来修饰的
  • 接口的方法默认都是public abstract来修饰的
  • 类实现接口的关键字implements , 继承接口后一定要实现接口中的所有抽象方法。
  • 如果一个类继承接口,却未实现它的抽象方法,那么该类一定是抽象方法
  • 接口中没有构造方法,接口要通过类继承它来实例化
  • 接口可以继承接口


 用子类继承某个抽象类或者接口实例化出来的对象,只能调用其父类或者接口中的方法,但是用子类直接实例化出来的对象,就可以调用接口和抽象类的全部方法

 Eat接口

public interface Eat {
	void eat();
}

 Run接口

public interface Run {
	void run();
}

 Anminal抽象类

public abstract class Anminal {
	public void jump() {};
	public  void drunk() {};
}

定义一个类

public class Cow extends Anminal implements Eat,Run{

	@Override
	public void run() {
		System.out.println("牛在跑。。。。");
	}

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("牛在吃草。。。。。。");
	}

	public void jump() {
		System.out.println("牛在跳。。。。");
	}
	
	public void drunk() {
		System.out.println("牛在喝水。。。。");
	}
	
	public void flay() {
		System.out.println("牛在飞。。。。。");
	}
	
}

测试类

public class Test{
	public static void main(String[] args) {
		//父类只能调用父类的方法
		Anminal cowAnminal = new Cow();
		cowAnminal.drunk();
		cowAnminal.jump();
		
		//eat接口只能调用eat接口的方法
		Eat Coweat = new Cow();
		Coweat.eat();
		
		//run接口只能调用run接口的方法
		Run cowRun = new Cow();
		cowRun.run();
		
		//cow自身可以调用所有方法
		Cow cow = new Cow();
		cow.drunk();
		cow.eat();
		cow.jump();
		cow.flay();
	}
}


接口的多继承:

接口支持多继承,继承接口的关键字就是extends

一个类如果继承C接口就必须都要实现A和B俩个接口

public interface A {
    void test1();
}

public interface B {
    void test2();
}

public interface C extends A,B {
    void test3();
}

//实现类要是实现C接口的话,需要把C,A,B接口中所有的方法都是实现
public class D implements C {
    @Override
    public void test3() {

    }

    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }
}


在类中,接口还可以这样使用

 Runnable a =new Runnable() {
           @Override
           public void run() {
               System.out.println("bbb");
           }
       };


最后案例:接口回调;

先有接口的使用者,最后再有接口的实现者

  

定义Usb接口

public interface Usb {
	void service();
}

先定义接口的使用者

public class Computer {
	Usb usb1;
	Usb usb2;
	Usb usb3;
	
	public void run() {
		System.out.println("电脑开始正常工作。。。");
		if (usb1 !=null) {
			usb1.service();
		}
		if (usb2 !=null) {
			usb2.service();
		}
		if (usb3 !=null) {
			usb3.service();
		}
	}
	
}

然后再定义接口的实现者

public class Upan implements Usb{

	@Override
	public void service() {
		System.out.println("U盘正常启动。。。");
		
	}

}
public class Mouse implements Usb{

	@Override
	public void service() {
		System.out.println("鼠标正常使用。。。");
		
	}

}
public class Feng implements Usb{

	@Override
	public void service() {
		System.out.println("风扇正常使用。。。");
	}
	
}

定义测试类

public class Test{
	public static void main(String[] args) {
	Computer computer = new Computer();
    computer.usb1 = new Mouse();
    computer.usb2 = new Upan();
    computer.usb3 = new Feng();
    computer.run();	
	}
}


使用接口的好处:

  1. 可以实现解耦,面向对象最好要实现高内聚,低耦合的思想
  2. 可以提高程序的可扩展性

接口和抽象类的区别:

  1. 接口中的方法实现默认都是public,并且接口中不允许写具体的实现方法(jdk8后default修饰的方法可以写方法)
  2. 接口中的成员变量是final修饰的,而抽象类不一定
  3. 一个类只能继承一个抽象类,而可以继承多个接口
  4. 一个类实现接口,就要实现它全部的方法,因为接口的方法就是全部都是抽象的,而抽象类不需要,只需要实现抽象方法就好了
  5. 接口不能直接new出来,但是可以通过多态来实例化出来

抽象类是在类的层面上,是一种模板设计,而接口是行为的抽象,是一种行为的规范

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值