抽象类与接口的区别

抽象类和接口的区别

不同

No区别抽象类接口
1关键字abstract classinterface
2组成构造方法、普通方法、抽象方法、static方法、常量、变量抽象方法、全局变量
3子类使用class 子类 extends 抽象类class 子类 implements interface
4关系抽象类可以实现多个接口接口不能继承抽象类,却可以继承多个父接口
5权限可以使用各种权限只能使用public
6限制单继承局限没有单继承局限

相同

No相同说明
1子类抽象类和接口都必须有子类,子类必须要覆写全部的抽象方法
2实例化对象依靠子类对象的向上转型进行对象的实例化

JDK8新特性

JDK8对接口进行了增强,新增了默认方法和静态方法。

  • 默认方法:允许接口中添加default修饰的非抽象方法,且允许在接口实现类中进行重写覆盖,通过接口实现类的实例化对象进行方法调用。
  • 静态方法:允许接口中添加static修饰的非抽象方法,只能通过接口名来进行方法调用。

定义接口:

public interface Speakable {
	// 默认方法
	default void sayHi() {
		System.out.println("Hi form interface!");
	}
	
	// 默认方法
	default void sayHello() {
		System.out.println("Hello form interface!");
	}
	
	// 静态方法
	static void sayBye() {
		System.out.println("Bye!");
	}
}

定义接口实现类:

public class Person implements Speakable{
	
	// 覆盖接口默认方法
	@Override
	public void sayHello() {
		System.out.println("Hello from class!");
	}
	
	public static void main(String[] args) {
		Person person = new Person();
		person.sayHello();
		person.sayHi();
		// 调用接口静态方法
		Speakable.sayBye();
	}
}

输出:

Hello from class!
Hi form interface!
Bye!

总结

从设计角度来说:接口是为了规范类的行为,是“like-a”的关系,抽象为了类的复用,是“is-a”的关系。
抽象类支持的功能比接口更多,但有单继承局限,优先考虑使用接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值