Java 面向对象编程--抽象类

本文介绍了Java中的抽象类概念,阐述了为何需要抽象类,展示了抽象类和抽象方法的定义方式,以及final修饰符的作用。重点讲解了抽象类的特性、抽象方法的定义与重写要求,以及final关键字在类、方法和变量上的应用。
摘要由CSDN通过智能技术生成

序言

在面向对象的概念中,所有的对象都是通过类进行描绘的,但是,并不是所有的类都是用来描述对象的。如果在一个类中没有包含足够的信息描绘一个具体的对象,这样的类就是抽象类。下面详细讲合抽象类和抽象方法。
 

为什么需要抽象类

假设有一个父类,名称叫做Pet。那么类是抽象出来的一个概念,并不存在被称为“Pet”的动物,因此创建它是没有任何意义的。那么,如何限制 Pet类不被实例化呢?这里就需要使用 Java 的抽象类。
 

抽象类

什么是抽象类呢?顾名思义,抽象类就是抽象的类,抽象往往是相对于具体而言的。一般来说,具体类有直接对应的对象,而抽象类没有,它往往表达的是抽象的概念。
例如:
一只猫是具体对象,而猫科动物则是抽象概念;
玉米是具体对象,而作物则是抽象概念。

在 Java 中,当一个类被 abstact 关键字修饰时,该类被称为抽象类。定义一个抽象类的语法格式如下:

<访问修饰符> abstract class <类名> { }

 

抽象方法

在 Java 中,当一个类的方法被 abstract关键字修饰时,该方法被称为抽象方法。抽象方法所在类必须是抽象类。
一个方法被定义为抽象方法,意味着该方法不会有具体的实现,而在抽象类的子类中通过方法重写实现。定义抽象方法的语法格式如下:

[ 访问修饰符 ] abstract < 返回类型 > < 方法名 >  ([ 参数列表 ])

abstract 关键字表示该方法被定义为抽象方法。

普通方法:

public void print(){ }

有实现但实现为空的普通方法。

抽象方法:

public abstract void print();

切记不要忘记语句最后的分号。这里,abstract关键字可以用来修饰类和方法,但不能用来修饰属性和构造方法。

抽象方法与普通方法最大的区别是:
普通方法有方法体,而抽象方法没有方法体。

注意:

  1. 在抽象类中,可以没有、有一个或多个抽象方法,甚至可以定义全部方法都是抽象方法。
  2. 抽象方法只有方法声明,没有方法实现。有抽象方法的类必须声明为抽象类。子类必须重写所有的抽象方法才能实例化;否则子类也必须声明成抽象类。
  3. 抽象类可以有构造方法,其构造方法可以被本类的其他构造方法调用。若此构造方法不是由private修饰的,也可以被本类的子类中的构造方法调用。
     

final 修饰符

final 是Java 的关键字,表示“最后的、最终的、不可变的”。使用 fnal 修饰符修饰的变量,只能进行一次赋值操作,并且在整个程序的生命周期中它的值都不可改变,被称为“常量”。fnal 修饰符除了可以定义常量,还可以用来修饰类和类的方法。
final 的使用规则:

  1. final 修饰类不能被继承(断子绝孙类)
  2. final 修饰方法不能被重写
  3. final 修饰的变量不能修改值(常量)声明时必须赋值
  4. final 修饰对象不能重新实例化

使用 final 修饰引用型变量时,变量的值是固定不变的,而变量所指向的对象的属性值是可变的。
 

总结

  1. 抽象类使用 abstract 修饰,不能实例化。
  2. 抽象类中可以有零到多个抽象方法。抽象方法使用abstract关键字修饰,没有方法体。
  3. 如果非抽象类继承抽象类,则必须实现父类的所有抽象方法,否则子类还是一个抽象类。
  4. 用 final 关键字修饰的类,不能再被继承。用 final 修饰的方法,不能被子类重写。用 final 关键字修饰的变量将变成常量,只能在初始化时进行赋值,不能在其他地方修改。
  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值