“接口”的定义及其与“抽象类”的区别

我们知道一个有抽象方法的类是抽象类,而当一个类中全是抽象方法时,就可以定义为接口(interface)

  • 接口命名通常以“I”开头;
  • 接口中的方法默认有public abstract(所以可以省略);
  • 接口中的变量默认有public static final(静态常量),因此可以通过接口名直接调用,例如:
public interface IMammal{
	public abstract void move();
	void sleep();				//默认有public abstract

	int AGE = 20;				//常量通常用大写字母
}
public class Test{
	public static void main(String[] args) {
		System.out.println(IMammal.AGE);	//输出结果:20
	}
}
  • 不同于“类”与“类”之间继承时为单继承一个接口可以继承多个其他接口
  • 抽象类虽不能创建对象,但可以构造方法,而接口中两者都不可以,例如:
interface IA{}
interface IB{}
public interface IMammal extends IA,IB{	//继承多个其他接口
	/*
	public IMammal(){}					//这是错的×,接口中不可以构造方法
	*/
}
  • 同时接口中也不能定义具体方法,
    【但从JDK8开始(之前的都不行),可以声明具体方法,但必须为staticdefault
public interface IMammal {
	/*
	public void bite(){
		System.out.println("正在咬...");	//这是错的×
	}
	*/
	public static void eat(){
		System.out.println("正在吃...");
	}
	public default void play(){
		System.out.println("正在嬉戏...");
	}
}
  • 一个“类”继承“接口”时,要用implements,而不能用extends;
  • 和接口的继承相同,一个类也可以继承多个接口;
  • 一个类如果不实现接口中的所有抽象方法(即重写),则该类必须为抽象类;
  • 一个类继承接口的同时,也就继承了接口中的常量,
    例如:上面定义过的静态常量AGE,当一个类继承该接口时,也就可以通过该类的类名直接调用;
public class Cat implements IMammal,IA{
	@Override
	public void move(){
		System.out.println("正在屋顶上飞奔...");
	}
	@Override
	public void sleep(){
		System.out.println("正在蜷缩着睡觉...");
	}
}
public class Test{
	public static void main(String[] args) {
		System.out.println(Cat.AGE);	//输出结果:20
	}
} 

需要注意的两点:

  • 接口只能继承父接口(一个或多个),不能继承类(包括普通类和抽象类);
  • 接口继承接口、类继承类 用extends,类继承接口 用implements

总结一下抽象类与接口的区别

抽象类接口
关键字abstractinterface
成员变量可包含任意合法成员变量只包含静态常量(默认public static final)
构造方法有构造方法无构造方法
方法可定义任意合法的方法JDK8之后(之前不可)可以通过static或default修饰声明具体方法
继承“类”与“类”之间只能是单继承(用extends),但一个类可以继承多个接口(用implements)一个接口可以继承多个父接口(用extends),但不能继承“类”
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不动声色的小蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值