JAVA_基础面向对象:接口

接口(interface)

接口的使用

1)接口使用interface来定义。

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

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

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

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

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

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

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

5)java开发中,接口通过让类去实现(implements)的方式来使用。
如果实现类覆盖了接口的抽象方法,则此实现类就可以实例化。
如果实现类没有覆盖接口的抽象方法,则此实现类仍是一个抽象类。

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

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)接口与接口之间可以继承,而且可以多继承。

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("打印机开始工作");		
	}
	
}
原文地址:https://www.cnblogs.com/BeautifulGirl230/p/14228186.html