接口和抽象类的区别

抽象类和接口总结: 

定义和实现方式:

抽象类:可以有方法申明也可以有实现

public abstract  class AbstractTest {
	public void test1() 
	{
	}
	public abstract void test2();
}

public class ExtendAbstractTest1  extends AbstractTest{
	public void test2() {
		//实现
	}

}

接口:只能有申明

public interface InterfaceTest {
	public static int a=1;
	public void test();
	public void test2();
	
}

public class ImplementIntfaceTest implements InterfaceTest{
	
	public void test() {
		// TODO Auto-generated method stub
	}
	public void test2() {
		// TODO Auto-generated method stub
		
	}
}

接口和抽象类都什么时候用:

虽然很多时候我们都说Java是因为不支持多继承,所以才会出现了接口,但是实际上:abstract class和interface是Java语言中的两种定义抽象类的方式,虽然它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概 念本质的理解、对于设计意图的反映是否正确、合理,因为它们表现了概念间的不同的关系(虽然都能够实现需求的功能)。

那我们什么时候用接口什么时候用抽象类?

个人觉得其实abstract class表示的是"is a"关系,也就是当有这种概念上的抽象对象,比如报警门本质上是门,这样的时候用。

interface表示的是"like a"关系,这里是添加新的功能的时候用的,比如你要是理解你的门有报警的功能,like 报警器。

大家在选择时可以作为一个依据。

接口和抽象类总结:


相同点:都不可以被实例化。如果一个类A去实现接口或者继承抽象类,要是不能实现接口或抽象类中的所有方法,那么这个类也只能是抽象的类。

不同点:

 

接口

抽象类

实例化    

不能被实例化,如果要实例化,接口变  量必须指向实现所有接口方法的类对  象。

不能被实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象。

实现方式    

接口要被类实现implements

抽象类要被子类继承extends

变量     

变量默认是Public static final,  所以在实现了接口的类中也不能修改,  通常我们也不会在接口里定义变量。  

普通变量

方法     

必须是Public  ,且所有方法隐含是抽  象的。接口中方法只能做申明,不能有  实现。

抽象方法要被继承和实现所以不能是static和private。

且抽象类中可以有方法申明也可以有实现。

 

 

抽象类中可以没有抽象方法,但是有抽象方法的类一定是抽象类。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值