Java中接口与抽象类的区别

接口 (interface)

  1. 概念:主要用来描述类具有什么功能,而并不给出每个功能的具体实现。
  2. 实现(implement):一个类可是实现一个或多个接口,并在需要接口的地方,随时使用实现了相应接口的对象。
  3. 接口中所有的方法自动属于public。因此,在接口中声明方法时,不必提供关键字public。
  4. 接口中决不能含有实例域。
  5. int compareTo(T other):用这个对象与other比较。如果这个对象小于other则返回负值;如果相等则返回0;否则返回正值。
    static void sort(Object[] a):使用mergesort算法对数组a中的元素进行排序。 要求数组中的元素必须属 于实现了Comparable接口的类,并且元素之间必须是可比较的。
    static int compare(int x,int y):如果想x<y返回一个负数,如果x=y,则返回o,否则返回正值。
    static int compare(doublex,doubley):如果想x<y返回一个负数,如果x=y,则返回o,否则返回正值。
  6. 特性:接口不是类,尤其不能使用new运算符实例化一个接口:x = new Comparable(.);// ERROR
    然而,尽管不能构造接口的对象,却能声明接口的变量:Comparable x ;//0K
    接口变量必须引用实现了接口的类对象,
    x = new Employee( . ); 11 OK provided Employee impletss Comparable
    接下来,如同使用instanceof检查一个对象是否属于某个特定类样,也可以使用instance查-一个对象是否实现了某个特定的接口:
    if (anObject instanceof Comparable) { .,,}
  7. 接口可以继承接口
  8. 接口中的域将被自动设为public static final
  9. 一个类只能继承一个父类,却能实现多个接口
  10. 接口中可以提供一个默认实现。必须用default修饰符标识这样一个方法,这样实现接口的类就可以不用实现直接使用这个方法,也可以覆盖这个方法
public interface Comparable<T>{
	default int compareTo(T other){
		return 0;
	}
}
  1. 一个类继承了一个父类,并实现了一个接口,如果这个父类和接口中存在相同的方法,那么该类调用时会调用父类中的这个方法;一个类实现了一个接口,这个接口继承了一个父接口,如果这个父类接口和接口中存在相同的方法,那么必须覆盖这个子类接口中的方法

抽象类

  1. 抽象类的基本概念
    抽象方法,只声明而未实现的方法我们称为抽象方法,所有的抽象方法都需要用abstract关键字声明,包含抽象方法的类也需要使用abstract关键字声明,抽象类和普通类相比,区别在于抽象类带有抽象方法,抽象方法可以只声明,而不需要方法体。
    代码演示:
package demo; 
public abstract class People{ 
	private String name; 
	//声明抽象方法,没有方法体,直接分号结束 
	public abstract void talk(); 
	public void eat(){ 
	System.out.println(name+”正在学习”); 
	} 
} 

  1. 抽象类和抽象方法必须用abstact关键字来修饰;
  2. 抽象类不能直接实例化,也就是不能直接使用new关键字产生对象;People p = new People(); //错误,People是抽象类,无法实例化
  3. 抽象方法定义时,只需要声明,不需要实现
  4. 含抽象方法的类必须被声明为抽象类,抽象类的子类必须实现所有的抽象方法后,才能被实例化,否则这个子类还是个抽象类
  5. 可以有方法的实现,但是这个方法不是abstract方法
  6. 抽象类中可以有构造器
  7. 抽象类中可以有public,protected和default修饰符
  8. 抽象类可以继承一个类和实现多个接口

接口与抽象类的区别

  1. 接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的
  2. 实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
  3. 接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
  4. 抽象类可以有构造函数,接口不可以有构造函数
  5. 抽象类中可以有普通成员变量,接口中没有普通成员变量,只能有常量
  6. 抽象类中的方法可以被static修饰,接口中的方法不可以被static修饰
  7. 抽象类中可以有普通方法和抽象方法,接口中的方法全是抽象方法
  8. 抽象中的方法可以被public,protected等修饰符修饰,接口中的方法全都是public abstract的方法,如果省略修饰符,则默认的也都是public abstract修饰
  9. 一个类只能继承一个抽象类,接口可以被多实现,即一个类只能继承一个类,可以实现多个接口

什么时候使用接口,什么时候使用抽象类

  1. 如果你想拥有一些方法,并且这些方法有默认实现,那么使用抽象类
  2. 如果你想实现多继承,那么就是用接口,java不支持多继承,但是可以实现多个接口
  3. 接口主要用于模块与模块之间的调用
  4. 抽象类主要用于当做基础类使用,即基类
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值