持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情
1️⃣前言
大家好,我是翼同学。今天笔记的内容是:
- 关键字:abstract、final、protected
2️⃣内容
abstract
abstract关键字可以用于修饰类,表示类属于抽象类。抽象类可以理解为不完整的设计图,一般将抽象类作为父类,让若干子类来继承。
另一方面,当父类知道子类一定需要完成某些功能,但每个子类对该功能的实现方法又不同,此时父类就可以将该方法定义为抽象方法,也是用abstract来修饰,将该抽象方法的具体实现交给子类来完成。
举个例子:
// 抽象类
abstract class Animals{
// 抽象方法
public abstract void eat(){};
}
注意事项如下:
- 如果一个类无法包含足够的信息来描绘具体的对象,我们就可以用
abstract关键字将其定义为抽象类; - 抽象类无法拥有对象,无法实例化;
- 定义抽象方法时不能声明方法体,只能由方法签名;
- 一旦在类中定义了抽象方法,那么这个类就必须为抽象类;也就是说,抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
- 抽象类可以有构造方法;
- 任何子类都必须重写(覆盖)父类的抽象方法,否则自身仍然是抽象类。
- 抽象类不能使用
final修饰符修饰,因为抽象类必须有子类才能使用使用,而final关键字定义的类不能有子类。
final
如果我们要希望某个类无法被继承(不允许扩展),此时我们就可以用final关键字来修饰这个类。这表明该类属于最终类。比如说String类就是final类,这意味着我们无法定义String类的子类。
格式如下:
final class 类名{
//...
}
另外,如果我们用final修饰类中的方法,则表明子类不能覆盖(重写)这个方法。(如果将一个类定义为final,则其中的方法会自动地成为final)
protected
一般来说,我们会将类的域(属性)定义为private,而将方法定义为public。类的私有部分对于其他类来说都是不可见的,只能通过公共部分来对外开放,即便是子类也不例外。
但是,有时我们会想让子类能够访问父类中的某个域或方法,而该部分又不希望被其他类访问到,此时就可以用protected关键字来修饰该部分。这就是受保护机制。但是在实际开发中,较少使用protected关键字,使用时需谨慎(Java中使用protected时的安全性比C++差)。
备注:
private: 仅对本类可见;public: 对所有类可见;protected: 对本包以及所有子类可见;
3️⃣写在最后
好了,今天的笔记就记到这里。