Java学习之路(七)关键字final,抽象类和抽象方法

本文探讨了Java编程中的final关键字及其应用场景,包括final修饰类、成员变量和成员方法,强调了其不可变性和防止重写的作用。同时,介绍了抽象类和抽象方法的概念,阐述了它们在软件设计中的模板模式以及子类继承的规则。重点讨论了抽象类的构造函数和与常规类的区别,帮助读者深化对Java面向对象特性的理解。
摘要由CSDN通过智能技术生成

Java学习之路(七)


前言

主要解决的问题:
关键字:final
抽象类和抽象方法


一、关键字:final

在这里插入图片描述

1.1 final的意义

final用来修饰一个类,意味着该类成为不能被继承的最终类。出于安全性的原因和效率上的考虑,有时候需要防止一个类被继承。
例如:Java类库中的String类,它对编译器和解释器的正常运行有着很重要的作用,不能轻易改变它,因此把它修饰为final类,使它不能被继承,这就保证了String类的惟一性。同时,如果你认为一个类的定义己经很完美,不需要再生成它的子类,这时也应把它修饰为final类。

1.2 final 修饰类

格式:

final class ClassName{    ...}
  1. final用来修饰一个类,意味着该类成为不能被继承的最终类
  2. 声明为final的类隐含地声明了该类的所有方法为final方法
  3. 声明一个类既为abstract,又为final是非法的,因为抽象类必须被子类继承来实现它的抽象方法。

1.3 final修饰成员变量

  1. 变量被声明为final后,成为常值变量(即常量),一旦被通过某种方式初始化或赋值,即不能再被修改
  2. 通常static与final一起使用来指定一个类常量(全局常量)。例如:
static final int SUNDAY=0;

把final变量用大写字母和下划线来表示,这是一种编码规定。

  1. final标记的成员变量必须在声明时或在每个构造器中代码块中显式赋
    值,然后才能使用。

1.4 final修饰成员方法

  1. 用final修饰的方法为最终方法不能再被子类重写可以被重载
  2. 方法被声明为final有时可以提高性能:编译器可以自由地内联调用它们,因为它“知道”它们不会被子类重写。

二、抽象类和抽象方法

在这里插入图片描述

2.1抽象类和抽象方法的意义

抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模 板,是所有子类保留的行为方式。
在软件开发中实现一个算法时,整体步骤很固定、通用,这些步骤已经在父类中写好了。但是某些部分易变,易变部分可以抽象出来,供不同子类实现。这就是一种模板模式。

2.2抽象类与抽象方法

  • 抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重
    写父类的抽象方法,并提供方法体。
  • 若没有重写全部的抽象方法,仍为抽象类。
  • 含有抽象方法的类必须被声明为抽象类
  • 抽象方法:只有方法的声明,没有方法的实现。以分号结束
  • 不能用abstract修饰变量、代码块、构造器;
  • 不能用abstract修饰私有方法静态方法final的方法final的类

2.3 注意事项

2.3.1 关于抽象类的构造函数的问题

  • 抽象类的构造方法定义为 Protected, 因为它只被子类使用。
  • 创建一个具体子类的实例时,它的父类的构造方法被调用以初始化父类中定义的数据域。

2.3.2抽象类与常规类的区别

  • 抽象类不能使用new 操作符创建它的实例.
  • 不能使用 new 操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型。例如:
    GeometricObject[] objects = new CeometricObject[10];
    然后可以创建一个 CeometricObject 的实例, 并将它的引用赋值给数组,如下所示:
    Objects[0] = new Triangle();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值