- 前言
- 1. abstract(抽象的)
- 2. static(静态的)
- 3. final(最终的)
- 结语
上期回顾:【Java笔记】第8章:面向对象的三大特性(封装、继承、多态)
个人主页:C_GUIQU
归属专栏:【Java学习】
前言
各位小伙伴大家好!上期小编给大家讲解了Java中面向对象的三大特性(封装、继承、多态),接下来讲讲Java中的三个修饰符!
1. abstract(抽象的)
在编程语言中,abstract
关键字用于表示抽象类或抽象方法。抽象类是不能直接实例化的类,它可能包含未实现的方法(抽象方法)。抽象方法是一种没有实现体的方法,它只有方法的签名,没有大括号和方法体。抽象方法的实现必须在非抽象子类中提供。
在Java中,使用abstract
关键字的类和方法有一些特定的规则:
- 抽象类:
- 抽象类不能被实例化。
- 抽象类可以包含抽象方法和非抽象方法。
- 抽象类可以包含构造器、静态方法、属性等。
- 抽象类可以有子类,这些子类必须实现抽象类中的所有抽象方法,除非这些子类也是抽象类。
- 抽象方法:
- 抽象方法没有方法体,即没有大括号和实现代码。
- 抽象方法只能存在于抽象类中。
- 子类继承抽象类时,必须实现所有的抽象方法,除非子类也是抽象类。
示例:
abstract class Shape {
abstract void draw(); // 抽象方法
}
class Circle extends Shape {
void draw() {
System.out.println("Draw a circle"); // 实现抽象方法
}
}
public class Main {
public static void main(String[] args) {
Shape s = new Circle(); // 创建抽象类的子类实例
s.draw(); // 调用实现的方法
}
}
在上面的例子中,Shape
是一个抽象类,它有一个抽象方法draw()
。Circle
类继承了Shape
类,并实现了draw()
方法。在Main
类的main
方法中,我们创建了Circle
类的实例,并调用了draw()
方法。由于Shape
是抽象的,我们不能直接实例化它,只能实例化它的具体子类。
2. static(静态的)
在编程语言中,static
关键字用于定义静态成员,包括静态变量(类变量)和静态方法(类方法)。静态成员属于类本身,而不是类的任何一个对象实例。因此,静态成员被所有的对象实例共享,并且可以通过类名直接访问,而无需创建类的实例。
以下是static
关键字的几个主要用途:
- 静态变量(类变量):
- 静态变量是属于类的,它们在类的所有对象之间共享。
- 静态变量在类加载时分配内存,只有一份拷贝,不管类的实例有多少个。
- 静态变量通常用于定义常量或者类的全局状态。
- 静态方法(类方法):
- 静态方法是属于类的,它们可以直接通过类名调用,而无需创建类的实例。
- 静态方法只能直接访问类的其他静态成员(静态变量和静态方法),它们不能直接访问非静态成员。
- 静态方法通常用于执行不依赖于对象状态的操作。
示例:
public class Utility {
public static int count = 0; // 静态变量
public static void printMessage() { // 静态方法
System.out.println("This is a static method.");
}
}
public class Main {
public static void main(String[] args) {
Utility.count = 10; // 通过类名访问静态变量
System.out.println(Utility.count); // 输出静态变量的值
Utility.printMessage(); // 通过类名调用静态方法
}
}
在上面的例子中,Utility
类有一个静态变量count
和一个静态方法printMessage()
。在Main
类的main
方法中,我们直接通过类名Utility
来访问静态变量count
和调用静态方法printMessage()
,而无需创建Utility
类的实例。
3. final(最终的)
在编程语言中,final
关键字用于表示不可变的引用、方法和类。当final
修饰一个变量时,表示该变量的值一旦被初始化之后就不能再改变。当final
修饰一个方法时,表示该方法不能被覆盖(重写)。当final
修饰一个类时,表示该类不能被继承。
以下是final
关键字的几个主要用途:
- final变量(常量):
- final变量可以是类变量(静态变量)或实例变量。
- final变量必须在声明时或在构造器中初始化,一旦赋值后其值就不能被改变。
- 如果final变量是一个对象引用,那么该引用本身不能被改变,但是对象的状态可以被改变。
- final方法:
- final方法不能被子类覆盖。
- final方法可以被继承,但是不能被重写。
- final方法通常用于阻止子类对方法的改变,确保方法的行为保持不变。
- final类:
- final类不能被其他类继承。
- final类通常用于创建不可扩展的类,例如Java标准库中的
String
类。
示例:
public class FinalExample {
private final int x = 10; // final实例变量
private static final int Y = 20; // final静态变量(类变量)
public final void finalMethod() { // final方法
System.out.println("This is a final method.");
}
}
public final class FinalClass { // final类
// 类的实现
}
public class Main {
public static void main(String[] args) {
FinalExample example = new FinalExample();
System.out.println(example.x); // 输出final实例变量的值
System.out.println(FinalExample.Y); // 输出final静态变量的值
example.finalMethod(); // 调用final方法
}
}
在上面的例子中,FinalExample
类有一个final实例变量x
和一个final静态变量Y
,以及一个final方法finalMethod()
。FinalClass
是一个final类,不能被其他类继承。在Main
类的main
方法中,我们创建了FinalExample
类的实例,并访问了它的final变量和方法。由于这些变量和方法都是final的,它们的值和行为都不能被改变或覆盖。
结语
至此,Java的三个修饰符讲解完毕。
感谢您的观看!互三必回!持续更新中~!