Java抽象类与接口的区别

理解

接口类似于整个系统的总纲设计,它制定了系统各个模块应该遵守的标准,因此一个系统内中接口不应该经常改变。一旦接口被改变了,对整个系统都会带来辐射式的影响,最后导致大部分类都需要改。

抽象类相当于一个系统中标准模块,其他模块都基于此实现的,也就是说多个子类的共同父类,体现的是一种模版式设计。抽象类作为多个子类的抽象父类,相当于标准产品,这个标准产品实现系统中部分功能,但还不能上线使用,必须进一步改进才可以最终成为一个成品。

语法定义

接口:

public interface InterfaceDemo {

	void onGetUserInfo();
	
	void onDeleteUserInfo();

}

抽象类:

//在抽象类中实现接口InterfaceDemo
public abstract class AbstractDemo implements InterfaceDemo{

	abstract void initUserInfo();
	
	//在抽象类实现部分功能
	protected void init(){
		List<String> mList= new ArrayList<>();
		mList.add("……");
	}

}

接口与抽象类的实现

//继承于抽象类,来实现整个功能
public  class AbstractDemoImpl extends AbstractDemo{

	/**
	 * 其中onGetUserInfo()和onDeleteUserInfo()是接口中定义函数
	 * 在在抽象类中实现了接口
	 */
	@Override
	public void onGetUserInfo() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onDeleteUserInfo() {
		// TODO Auto-generated method stub
		
	}

	/**
	 * 抽象方法的实现
	 */
	@Override
	void initUserInfo() {
		// TODO Auto-generated method stub
		
	}
	
	/**
	 * 也可重写抽象类中某些功能
	 */
	@Override
	protected void init() {
		super.init();
	}

	
}

抽象类和接口的对比

参数抽象类接口
默认的方法实现
它可以有默认的方法实现
接口完全是抽象的。它根本不存在方法的实现
实现

子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,

它需要提供抽象类中所有声明的方法的实现。

子类使用关键字implements来实现接口。

它需要提供接口中所有声明的方法的实现

构造器
抽象类可以有构造器
接口不能有构造器
与正常Java类的区别
除了你不能实例化抽象类之外,它和普通Java类没有任何区别
接口是完全不同的类型
访问修饰符
抽象方法可以有publicprotecteddefault这些修饰符
接口方法默认修饰符是public。你不可以使用其它修饰符。
main方法
抽象方法可以有main方法并且我们可以运行它
接口没有main方法,因此我们不能运行它。
多继承
抽象方法可以继承一个类和实现多个接口
接口只可以继承一个或多个其它接口
速度
它比接口速度要快
接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。
添加新方法

如果你往抽象类中添加新的方法,你可以给它提供默认的实现。

因此你不需要改变你现在的代码。

如果你往接口中添加方法,那么你必须改变实现该接口的类。



抽象类和接口的使用场景

  • 如果你拥有一些方法并且向让他们实现一些默认功能,建议使用抽象类
  • 如果要实现多重继承,那必须使用接口。因为Java不支持多继承,子类不能继承多个类,但可以通过实现多个接口来满足需求。
  • 如果某些功能经常被改变,那么可是使用抽象类。如果基础功能经常性改变,使用接口的实现,则需要改变多个类实现了该接口的类。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值