JAVA_基础面向对象:接口

接口(interface)

接口的使用java

1)接口使用interface来定义。ide

2)在java中,接口和类是并列的两个结构。code

3)如何定义接口:定义接口中的成员。对象

JDK7及之前:只能定义全局常量和抽象方法。继承

  • 全局常量:public static final(可省略)
  • 抽象方法:public abstract (可省略)

JDK8:除了定义全局常量和抽象方法以外,还能够定义静态方法、默认方法。接口

  • 接口中定义的静态方法,只能经过接口来调用。
  • 经过实现类的对象,能够调用接口中的默认方法。
  • 若是实现类重写了接口中的默认方法,调用时,则是重写后之后的方法。
  • 若是子类(或实现类)继承的父类和实现的接口中声明了同名同参的方法,那么子类在没有重写此方法的状况下,默认调用父类中的同名同参的方法。(类的优先原则)
  • 若是实现类实现了多个接口,而多个接口定义了同名同参的默认方法,那么在实现类没有重写此方法的状况下,报错。
    →接口冲突(这就须要咱们必须在实现类中重写此方法)
  • 如何在子类(或实现类)的方法中调用父类、接口中被重写的方法。
//		调用接口中默认的方法
		CompareA.super.method3();
		CompareB.super.method3();

4)接口中不能定义构造器,意味着接口不能够实例化。开发

5)java开发中,接口经过让类去实现(implements)的方式来使用。
若是实现类覆盖了接口的抽象方法,则此实现类就能够实例化。
若是实现类没有覆盖接口的抽象方法,则此实现类还是一个抽象类。flash

6)java类能够实现多个接口 → 弥补了java单继承的局限性。
格式class AAextends BB implements CC,DD,EEit

public class InterfaceTest {
	public static void main(String[] args) {
		System.out.println(Flyable.MAX_SPEED);//7900
		System.out.println(Flyable.MIN_SPEED);//1
		Plane plane = new Plane();
		plane.fly();//经过引擎起飞
	}
}
interface Flyable{
	//全局常量
	public static final int MAX_SPEED = 7900;//未省略
	int MIN_SPEED = 1;//省略
	//抽象方法
	public abstract void fly();//未省略
	void stop();//省略
}
interface Attackable{
	void attack();
}
class Plane implements Flyable{
	@Override
	public void fly() {
		System.out.println("经过引擎起飞");
	}
	@Override
	public void stop() {
		System.out.println("驾驶员减小起飞");
	}
}
abstract class Kite implements Flyable{
	@Override
	public void fly() {}
}
class Bullet extends Object implements Flyable,Attackable{
	@Override
	public void attack() {}
	@Override
	public void fly() {}
	@Override
	public void stop() {}
}

7)接口与接口之间能够继承,并且能够多继承。class

interface AA {
	void method1();
}
interface BB {
	void method2();
}
interface CC extends AA,BB {}

8)接口的具体使用,体现多态性。

9)接口能够看作是一种规范。

public class USBTest {
	public static void main(String[] args) {
		Computer computer = new Computer();

//		建立了接口的非匿名实现类的非匿名名对象
		Flash flash = new Flash();
		computer.transferData(flash);
		System.out.println("************************");
		
//		建立了接口的非匿名实现类的匿名名对象
		computer.transferData(new Printer());
		System.out.println("************************");
		
//		建立了接口的匿名实现类的非匿名名对象
		USB phone = new USB() {
			@Override
			public void start() {
				System.out.println("手机开始工做");
			}
			@Override
			public void stop() {
				System.out.println("手机结束工做");
			}
		};
		computer.transferData(phone);
		System.out.println("************************");
		
//		建立了接口的匿名实现类的匿名名对象
		computer.transferData(new USB() {
			@Override
			public void start() {
				System.out.println("MP3开始工做");
			}
			@Override
			public void stop() {
				System.out.println("MP3结束工做");
			}
		});
	}
}
class Computer {
	public void transferData(USB usb) {
		usb.start();
		System.out.println("具体传输数据的细节");
		usb.stop();
	}
}

interface USB {
	public abstract void start();

	void stop();
}

class Flash implements USB{

	@Override
	public void start() {
		System.out.println("U盘开始工做");
	}

	@Override
	public void stop() {
		System.out.println("U盘结束工做");
	}
	
}

class Printer implements USB {

	@Override
	public void start() {
		System.out.println("打印机开始工做");
	}

	@Override
	public void stop() {
		System.out.println("打印机开始工做");		
	}
	
}
相关文章
相关标签/搜索