Java中的接口

1.接口的定义

1.1接口的概念

  • ①定义接口使用的事interface关键字,不再使用class关键字;
  • ②修饰符可以是public或者忽略,忽略的话则访问权限为默认(default);
  • ③接口名与类名采取相同的命名规则;
  • ④一个接口可以有多个父接口,接口只能继承接口,不能继承类;
  • ⑤接口是供类来实现的,所以接口里不能有构造器和初始化块;
  • ⑥接口里可以包含成员变量(静态常量,系统自动添加public static
    final修饰符)、方法(抽象实例方法、类方法、默认方法、私有方法)、内部类(内部接口、枚举类);
  • ⑦系统自动会为接口中的普通方法添加abstract修饰符,变为抽象方法;
  • ⑧类在实现接口时,应使用implements关键字;
  • ⑨类在使用接口后,必须实现接口中的所有抽象方法;

1.2接口的使用示例

路径示意图:
路径
接口output中的代码:

package java_knowledge_01;

// 关键字为interface
public interface Output {
	// 在接口的只能定义常量,系统默认添加修饰符public static final
	int MAX_LINE = 20;

	// 接口中的普通方法默认添加abstract修饰符,变为抽象方法
	void out();

	// 接口中的普通方法默认添加abstract修饰符,变为抽象方法
	void getData(String msg);

	// 定义默认方法,使用default修饰
	default void print(String... msgs) {
		for (String msg : msgs) {
			System.out.println(msg);
		}
	}

	// 定义默认方法,使用default修饰
	default void test() {
		System.out.println("默认的default修饰的test()方法");
	}

	// 接口中的类方法
	static String staticTest() {
		return "接口里的类方法";
	}

	// 接口中的私有方法
	private void idea1() {
		System.out.println("私有方法");
	}

	// 接口中的私有静态方法
	private static void idea2() {
		System.out.println("私有静态方法");
	}
}

实现类Idea中的代码:

package java_knowledge_01;

public class Idea implements Output{

	// 类需要实现接口中的全部抽象方法
	@Override
	public void out() {
		// TODO Auto-generated method stub
		System.out.println("实现抽象方法");
	}

	@Override
	public void getData(String msg) {
		// TODO Auto-generated method stub
		System.out.println("实现抽象方法");
	}

}

类demo中的代码:

package java_knowledge_02;

public class demo {
	public static void main(String[] args) {
		// 接口中的变量修饰符是public,所以不同的包中也可以使用
		System.out.println(java_knowledge_01.Output.MAX_LINE);
		// 以下代码不能执行,因为接口中变量的修饰符为final,不可修改
		// java_knowledge_01.Output.MAX_LINE = 1;
	}
}

2.接口的继承

2.1 java接口的继承

在java中,一个接口可以继承多个接口;字接口继承了父接口后,会获得父接口里定义的所有抽象方法和常量。

2.2 示例代码

代码如下:

interface A{
	void testA();
	int a = 1;
}

interface B{
	void testB();
	int b = 2;
}

// 接口的多继承,接口C可以同时继承A、B两个接口
interface C extends A,B {
	void testC();
	int c = 3;
}

// demo类实现接口C
public class demo implements C {
	// 因为接口C继承了接口A、B,所以A、B中的抽象方法也被C继承了
	// 因此,使用了接口C的demo类需要实现A、B、C中的所有抽象方法
	@Override
	public void testA() {
		// TODO Auto-generated method stub
		System.out.println("实现抽象方法");
	}
	
	@Override
	public void testB() {
		// TODO Auto-generated method stub
		System.out.println("实现抽象方法");
	}

	@Override
	public void testC() {
		// TODO Auto-generated method stub
		System.out.println("实现抽象方法");
	}
	
	public static void main(String[] args) {
		// 因为接口C继承了接口A、B,所以A、B中的变量可以通过接口C来使用
		System.out.println(C.a);
		System.out.println(C.b);
		System.out.println(C.c);
	}

}

3.接口与抽象类

3.1接口与抽象类的共同点

  • ①接口和抽象类都不能实例化,只能用于被其他类实现/继承;
  • ②接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的子类必须实现其中的所有抽象方法;

3.2接口与抽象类的不同点

  • ①接口里不能有普通方法,抽象类中可以有普通方法;
  • ②接口里只能定义静态常量,无法定义普通成员常量,抽象类中可以定义普通成员常量;
  • ③接口里没有构造器,抽象类中可以有空构造器,用于子类的调用;
  • ④接口里不能有初始化块,抽象类中可以有;
  • ⑤一个类可以实现多个接口,但一个类只能继承到一个抽象类;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值