接口概念

如果一个类之中只是由抽象方法和全局常量所组成的,那么在这种情况下不会将其定义为一个抽象类,而只会将其定义为接口,所以所谓的接口严格来讲就属于一个特殊的类,而且这个类里面只有抽象方法与全局常量。

interface A { 					// 定义接口
	public static final String MSG = "YOOTK"; // 全局常量
	public abstract void print(); 		// 抽象方法
}

接口使用规则

             Ø  接口必须要有子类,但是此时一个子类可以使用implements关键字实现多个接口,避免了单继承局限;

             Ø  接口的子类(如果不是抽象类),必须要覆写接口中的全部抽象方法;

             Ø  接口的对象可以利用子类对象的向上转型进行实例化操作。

实现接口

interface A { 	// 定义接口
	public static final String MSG = "ww"; 	// 全局常量
	public abstract void print(); // 抽象方法
}
interface B {		// 定义接口
	public abstract void get();// 抽象方法
}
class X implements A, B { 			// X类实现了A和B两个接口
	public void print() {	// 覆写A接口的抽象方法
		System.out.println("A接口的抽象方法!");
	}
	public void get() {	// 覆写B接口的抽象方法
		System.out.println("B接口的抽象方法!");	}
}
public class TestDemo {
	public static void main(String args[]) {	// 此时X类是A和B两个接口的子类,所以此类对象可以同时实现两个接口的向上转型
		X x = new X(); // 实例化子类对象
		A a = x; // 向上转型
		B b = x; // 向上转型
		a.print();// 调用被覆写过的方法
		b.get();// 调用被覆写过的方法
		System.out.println(A.MSG);// 直接访问全局常量
	}
}

程序执行结果:

A接口的抽象方法!(“a.print()”语句执行结果)

B接口的抽象方法!(“b.get()”语句执行结果)

ww(“A.MSG”语句执行结果)



子类同时继承抽象类和实现接口

interface A { 			// 定义接口
	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类继承了抽象类C,实现了A和B两个接口
	public void print() {		// 覆写接口A中的方法
		System.out.println("A接口的抽象方法!");
	}
	public void get() {	// 覆写接口B中的方法
		System.out.println("B接口的抽象方法!");
	}
	public void change() {	// 覆写抽象类C的方法
		System.out.println("C类的抽象方法!");
	}
}

抽象类只能继承一个抽象类,但是接口可以继承几个接口,但是接口不能继承抽象类

接口的多继承

interface A {				// 定义父接口
	public void funA();
}
interface B {				// 定义父接口
	public void funB();
}
interface C extends A, B {	// 利用extends,实现接口多继承
	public void funC();
}
class X implements C {		// 实现C接口子类要覆写全部抽象方法
	public void funA() {}		// A接口定义的方法
	public void funB() {}		// B接口定义的方法
	public void funC() {}		// C接口定义的方法
}

从继承关系上将抽象类的限制比接口限制较多:

1.  一个抽象类只能继承一个抽象类的父类而接口没有这个限制

2.  一个子类只能继承一个抽象类,却可以实现多个接口。

在接口里定义抽象类

interface A {
	public void funA();
	abstract class B {		// 定义接口中的抽象类
		public abstract void funB();
	}
}
class X implements A { 		// X实现了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 { 	// X实现了A接口
	public void funB() {}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值