Java基础:第三十八讲 抽象类与抽象方法

本讲要说明的几个问题:什么是抽象类,抽象类的特点,抽象方法,抽象方法与抽象类的关系。

1、什么是抽象类

抽象类,实际上就是对类的进一步抽象。

从前面的介绍中,我们知道在面向对象的分析和设计中有很多次抽象,从现实世界中的对象抽象出软件系统中的对象(保留主要属性和行为,去掉次要属性和行为),从软件系统中的对象抽象出软件系统中的类(去掉属性值,把具体的对象变成了抽象的概念),现在我们要介绍的抽象类是对多个类的抽象结果,抽象类中描述了多个具体类的共同特征和行为,与我们之前说的父类是类似,不同之处在于抽象类不能有具体的对象,抽象类可以有不用实现的方法。

典型的例子就是交通工具,我们知道飞机、轮船、汽车、火车都是交通工具,都可以把乘客从一个地方带到另外一个地方,但是各种不同的交通工具的运行方式是不同的,汽车沿着公路走,火车沿着铁路线走,飞机需要先起飞、飞行、然后降落,有一定的航线。正式因为有这些共同特征,才抽象出交通工具这样的类。

我们可以说具体的飞机、轮船、汽车和火车对象,但是没有交通工具对象,这时候交通工具就是抽象的。

2、如何定义抽象类

使用abstract关键字定义抽象类,例如:

public abstract class A{

   ...

}

如果某个类是抽象类,则这个类不能有具体的对象。

如果某个类没有具体的对象,这个类还有什么用呢?通过这个类可以派生出子类,子类可以是抽象类也可以是非抽象类。所以有抽象类通常都是作为父类存在的。

3、抽象方法

在前面的介绍中,我们知道方法包括如下组成部分:方法的修饰符、方法的返回值类型、方法的名字、方法的参数列表、方法体。例如:

    public int getParentA(){
     return super.a;
    }

如果一个方法只给出方法的定义部分,而没有方法的具体实现,这个方法就是抽象方法。

例如:

    public int getParentA();

抽象方法的含义:某个对象具有这样的方法,但是方法如何实现不清楚。

例如上面的例子,各种交通工具都可以把乘客从一个地方带到另外一个地方,所以交通工具应该具有一个方法——移动,但是具体如何移动,不清楚,所以如果要在交通工具这个类中定义这个方法,只能是抽象的。意味着,交通工具应该有一个方法(移动),但是具体如何实现,需要看具体的子类。

另外一个典型的例子是几何图形,在软件系统中需要画各种图形,每种图形是具体的类,而图形作为抽象类。要在系统中显示各种图形,每种图形类都应该有画的方法,但是各种图形的画法不同,例如三角形需要给出3个点,而圆需要给出圆心和半径,直线需要给出两个点。所以在图形抽象类中中只能声明这个一个画的方法,具体实现留给子类。

4、如何定义抽象方法

抽象方法使用关键字abstract定义,例如画图的方法可以定义为:

    public abstract void print();

在类中,如果一个方法只给出声明,没有具体实现,应该使用abstract定义为抽象方法。

5、抽象方法与抽象类

如果一个类中出现了抽象方法,则这个类必须定义为抽象类。例如上面的图形类:

public abstract class Graphics{

    ...

    public abstract void print();

}

子类可以去实现具体的画法,例如三角形:

public class Triangle extends Graphics{

   private Point[] p; // 描述三角形的三个点

   public abstract void print(){

      ... // 根据3个点画图

   }

}

请记住:有抽象方法的类一定是抽象类。

抽象类一定要有抽象方法吗?不一定,抽象类可以没有抽象方法。

抽象类一定不能有实例,下面的代码是错误的:

Graphics g = new Graphics();

6、抽象类的作用

抽象类用于派生新的子类,子类在继承抽象类的时候,必须实现所有抽象方法,除非子类还是抽象类。

抽象类的子类允许是抽象类。

下次介绍面向对象的一大特性——多态性。

李绪成 CSDN Blog: http://blog.csdn.net/javaeeteacher

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值