Java-抽象类和接口类的异同

  1. 抽象类:

(1)含义:在继承的层次结构中,每个新的子类都使类变得更加明确和具体。如果一个子类向父类追溯,类就会变得更通用、更加不明确。一个设计抽象、没有任何具体实例的父类称为抽象类

(2)定义:在类的头部使用abstract修饰符表示该类为抽象类。

例:public abstract class ClassName

(3)抽象方法:

通过abstract关键字将方法修饰为抽象方法。

抽象方法是出现在基类中的一种方法,但要求在派生类中被重写

一个抽象方法只有方法头,没有方法主体

抽象方法格式:

访问修饰符 abstract 返回类型 方法名(参数列表);

一个包含抽象方法的类会自动变成抽象类。

抽象类不能使用new 操作符来创建它的实例。抽象方法只有定义而没有实现,它的实现由子类提供。

(4)说明:

  1. 抽象方法不能包含在非抽象类中。如果抽象父类的子类不能实现所有的抽象方法,那么子类也必须定义为抽象的。还需要注意到,抽象方法是非静态的。
  2. 抽象类不能使用new操作符来初始化。但是,仍然可以定义它的构造方法,这个构造方法在它的子类的构造方法中调用。
  3. 包含抽象方法的类必须是抽象的。然而,可以定义一个不包含抽象方法的抽象类。这个抽象类作用于作为定义新子类的基类。
  4. 子类可以重写父类的方法并将它定义为抽象的。
  5. 即使子类的父类是具体的,这个子类也可以是抽象的。
  6. 不能使用new操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型。

2.接口:接口在许多方面都与抽象类很相似,但是它的目的是指明相关或者不相关类的对象的共同行为。

(1)定义:

接口定义的通用格式:

public interface InterfaceName {

   (方法头.. ..

}

2)说明:

  1. 接口中所有的方法都是public,抽象方法。
  2. 一个类可以实现一个或者多个接口。
  3. Java中,接口被看作一种特殊的类。
  4. 与抽象类相似,不能使用new操作符来创建接口的实例。

3.抽象类与接口的区别:

接口的使用和抽象类的使用基本类似,但是,定义一个接口和定义一个抽象类有所不同。

Java 只允许为类的继承做单一继承,但是允许使用接口做多重继承。

例:

public class NewClass extends BaseClass

    implements Interface1, ... , InterfaceN {

    ...

}

利用关键字extends,接口可以继承其他接口。这样的接口称为子接口(subinterface)。

例如:NewInterface 是 Interface1,…, InterfaceN 的接口。

public interface NewInterface extends Interface1,...,InterfaceN{

    // constants and abstract methods

}

接口可以继承其他接口但不能继承类。一个类可以继承它的父类同时实现多个接口。

所有的类共享同一个根类Object,但是接口没有共同的根。与类相似,接口也可以定义一种类型。一个接口类型的变量可以引用任何实现该接口的类的实例。如果一个类实现了一个接口,那么这个接口就类似于该类的一个父类。可以将接口当作一种数据类型使用,将接口类型的变量转换为它的子类,反过来也可以。

参考文献:

梁勇. Java语言程序设计与数据结构基础篇[M]. 北京:机械工业出版社,2018.167-175

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值