interface A { // 定义接口
public static final String MSG = "Hello"; // 全局常量
public abstract void print(); // 抽象方法
}
interface B {
public abstract void get();
}
class X implements A, B { // X类实现了A和B两个接口
public void get() {
System.out.println("A接口的抽象方法");
}
public void print() {
System.out.println("B接口的抽象方法");
}
}
public class MainClass {
public static void main(String[] args) {
X x = new X(); // 实例化子类对象
A a = x; // 向上转型
B b = x; // 向上转型
a.print();
b.get();
}
}
以上的代码实例化了X类对象。现在由于X是A和B的子类,那么X类的对象可以变为A接口或B接口的对象。
public class MainClass {
public static void main(String[] args) {
A a = new X();
System.out.println(a instanceof A);
System.out.println(a instanceof B);
}
}
interface A { // 定义接口
public static final String MSG = "Hello"; // 全局常量
public abstract void print(); // 抽象方法
}
interface B {
public abstract void get();
}
abstract class C {
public abstract void change();
}
class X extends C implements A, B { // X类实现了A和B两个接口
public void get() {
System.out.println("A接口的抽象方法");
}
public void print() {
System.out.println("B接口的抽象方法");
}
public void change() {
System.out.println("C类的抽象方法");
}
}
interface A {
public void funA();
}
interface B {
public void funB();
}
// C接口同时继承了A和B两个接口
interface C extends A, B { // 此处使用extends
public void funC();
}
class X implements C {
public void funA() {}
public void funB() {}
public void funC() {}
}
interface A {
public void funA();
abstract class B {
public abstract void funB();
}
}
class X implements A { // 实现了A接口
public void funA() {
System.out.println("Hello World");
}
class Y extends B { // 内部抽象类的子类
public void funB() {}
}
}
范例: 在一个接口内部如果使用了static去定义一个内部接口表示是一个外部接口。
interface A {
public void funA();
static interface B { // 外部接口
public void funB();
}
}
class X implements A.B {
public void funB() {}
}
// 标准可以连接不同层的操作类
interface USB { // 定义标准一定使用接口
public void start();
public void stop();
}
范例: 定义电脑
class Computer {
public void plugin(USB usb) { // 插入
usb.start(); // 固定操作
usb.stop();
}
}
不管以后会有多少个设备,只要它是USB标准的实现子类,就都可以在电脑上使用。
范例: 定义U盘
class Flash implements USB {
public void start() {
System.out.println("U盘开始使用");
}
public void stop() {
System.out.println("U盘停止使用");
}
}
范例: 定义打印机
class Print implements USB {
public void start() {
System.out.println("打印机开始使用");
}
public void stop() {
System.out.println("打印机停止使用");
}
}
按照这样的形式可以准备出无数的子类,并且这无数个子类都可以在电脑的plugin()方法上使用。
public class MainClass {
public static void main(String[] args) {
Computer com = new Computer();
com.plugin(new Flash());
com.plugin(new Print());
}
}
此时可以很好的描述出显示的关系。
在现实生活中,标准的概念随处可见,而在程序之中标准就是利用接口来定义的。
接口的应用 —— 工厂设计模式(Factory)
下面观察一段程序代码。
interface Fruit {
public void eat();
}
class Apple implements Fruit {
public void eat() {
System.out.println("吃苹果");
}
}
public class MainClass {
public static void main(String[] args) {
Fruit fruit = new Apple();
fruit.eat();
}
}
class Factory {
public static Fruit getInstance(String className) {
if ("apple".equals(className)) {
return new Apple();
} else if ("oragle".equals(className)) {
return new Orange();
} else {
return null;
}
}
}
public class MainClass {
public static void main(String[] args) {
Fruit fruit = Factory.getInstance("apple");
fruit.eat();
}
}