JavaSE面向对象_抽象类

当一个类是一个抽象的概念,单纯是为了继承而不是为了创建对象时,

如果一个类单纯的为了继承,而不是为了创建对象时,就考虑直接不让它创建对象了。这就是抽象类。

如果一个方法单纯的为了让子类继承,被子类重写,而不是为了被调用,就考虑不让它被调用,不需要方法体。这就是抽象方法。

 

抽象类和抽象方法的语法

抽象类的语法

[访问权限修饰符] abstract 类名{
    // 类体
}

解释:

抽象类是抽象的,无法new创建对象,定义抽象类就是为了让子类继承的,抽象类和它的子类仍然是继承关系,存在父子类,也存在多态现象。

定义抽象类后,抽象类中可以定义抽象方法。
 

抽象方法的语法

[访问权限修饰符] abstract 返回值类型 方法名(形参列表);

解释:

抽象方法必须在抽象类中,没有方法体,没有具体实现,在方法声明后要写分号。

抽象类不能创建对象,那么抽象方法也不可能直接调用,所以抽象方法定义的目的就是为了让子类继承和重写的。

 

抽象类的定义

在继承体系中,从祖先类开始,随着一个个子类的定义,子类变得越来越具体,而祖先类则更具有一般性和抽象性。为了体现祖先类在设计上的抽象性,我们只将该类作为派生其他类的父类,而不能创建对象,这样的类称之为抽象类。

 

抽象类的特点

根据抽象类的语法结构,从以下角度来看抽象类的特点。

  1. 类名命名

    首先抽象类的类名依然遵循“大驼峰”的命名规范。在实际开发中,一般抽象类命名会以“Base”或“Abstract”开头,表示这是一个抽象类,在使用时便于阅读和理解。

  2. 修饰符

    和普通类一样,有两种访问级别。注意不能使用final修饰抽象类,因为final修饰类表示不能被继承的类,而抽象类的目的就是为了被继承的。

  3. 成员特点

    • 普通成员:成员变量和成员方法,普通类能定义的抽象类也一样。

    • 静态成员:静态成员变量和静态成员方法,普通类能定义的抽象类也一样。

    • 抽象方法

      从语法上来说,抽象类中可以没有抽象方法,但是抽象类中没有抽象方法这个抽象类就没有意义了,因此实际中定义抽象类就有抽象方法。

      一旦抽象父类中定义了抽象方法,那么所有的普通子类都必须实现所有的抽象方法,普通类只要继承抽象类就必须实现类中所有的抽象方法,这本质上是方法的重写。

      但抽象类的子类也可以是抽象类,抽象子类中可以不实现抽象方法,也可以选择实现部分抽象方法。

  4. 构造器

    虽然抽象类不能创建对象,但是抽象类也是有构造器的。抽象类的构造器虽然自己不能用,但是可以给子类用,创建子类对象时,给自身成员变量赋值。

  5. 代码块

    抽象类同样也有构造代码块和静态代码块,而且它们的使用和普通类一样。

总的来说,抽象类的成员和类中结构和普通类一样,只不过多了抽象方法,普通类中存在的结构在抽象类中都存在。因此,直接把一个普通类声明为抽象类在语法上是允许的。

 

注意事项

  1. abstract关键字只能用来修饰类或普通成员方法,不能修饰变量、构造器、代码块等结构。
  2. abstract修饰类时,不能同时有final修饰,因为一个需要继承一个不能继承,二者自相矛盾。
  3. abstract修饰成员方法表示抽象方法时,不能修饰私有方法,因为私有方法不能被重写;不能修饰静态方法,因为静态方法也不能被重写;不能修饰final修饰的方法,因为final修饰的方法虽然可以被继承,但是也不能被重写。
  4. 一个抽象类中虽然语法上可以没有抽象方法,但在实际中,抽象类就应该有抽象方法,这样这个抽象类才有意义。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值