0
点赞
收藏
分享

微信扫一扫

Java面向对象程序设计:抽象类与接口

乌龙茶3297 2023-08-08 阅读 49

一、抽象类

1.1 概念

使用abstract关键字定义的类称为抽象类,而使用这个关键字定义的方法称为抽象方法。抽象方法没有方法体,这个方法本身没有任何意义,除非它被重写,而承载这个抽象方法的抽象类必须被继承,实际上抽象类除了被继承没有任何意义。定义抽象类的语法如下:

public abstract class Parent{
    abstract void testAbstract();
}

1.2 性质

①在多态机制中,并不需要将父类初始化为对象,我们需要的只是子类对象,所以在Java语言中设置抽象类不可以实例化为对象。

②如果声明一个抽象方法,就必须将承载这个抽象方法的类定义为抽象类,不能在非抽象类中获取抽象方法。换句话说,只要类中有一个抽象方法,此类就被标记为抽象类。

③抽象类被继承后需要实现其中所有的抽象方法,也就是保证以相同的方法名称、参数列表和返回值类型创建出非抽象方法,当然也可以是抽象方法。

1.3 局限

如图所示,继承抽象类的所有子类需要将抽象类中的抽象方法进行覆盖。程序中有些不需要draw()方法的子类也不得不重写draw()方法。如果将draw()方法放置在另一个类中,让需要的子类继承,也不妥,因为Java中规定类不能同时继承多个父类。为了应对这种问题,接口的概念便出现了。

二、接口

2.1 概念

接口是抽象类的延申,可以将它看作是纯粹的抽象类,接口中的所有方法都没有方法体。接口使用interface关键字进行定义,其语法如下:

public interface Paintable{
    void draw(); //定义接口方法可省略public abstract关键字
}

2.2 性质

在接口中定义的任何字段都自动是static和final的。

一个类继承一个父类的同时再实现一个接口,可以写成如下形式:

public class Parallelogram extends Quadrangle implements Paintable {

}

Java中不允许出现多重继承,但使用接口就可以实现多重继承。一个类可以同时实现多个接口,因此可以将所有需要继承的接口放置在implements关键字后并使用逗号隔开。实现多个接口的语法如下:

但这可能会在一个类中产生庞大的代码量,因为继承一个接口需要实现接口中所有的方法。一个接口可以继承另一个接口,其语法如下:

 

举报

相关推荐

0 条评论