学习目录:
- 了解修饰符
- protected
- static (静态的) 和 abstract (抽象)
一. 修饰符
**1. 访问修饰符 **:
这些修饰符用于控制类、方法、属性等的访问权限。常见的访问修饰符包括:
public
: 任何类都可以访问private
: 只能在当前类内部访问protected
: 同一包中的类或继承该类的子类可以访问default
(没有修饰符):只能在同一包中的类中访问
**2. 非访问修饰符 **:
这些修饰符不控制访问权限,但用于提供其他功能。例如:
static
: 用于声明静态成员,表示该成员属于类而不是类的实例。final
: 表示常量,或者在方法、类、变量上设置不可更改的限制。abstract
: 用于声明抽象类或抽象方法,表示该类不能直接实例化或该方法必须由子类实现。
修饰符 | 描述 |
---|---|
final | 属性和方法不能被重写或修改 |
static | 属性和方法属于类,而不是某个对象 |
abstract | 只能在抽象类中使用,且只能用于方法。该方法没有方法体,例如 abstract void run(); 。方法体由子类提供(继承)。你将在继承和抽象章节中学习更多关于继承和抽象的内容。 |
transient | 在序列化包含这些属性和方法的对象时,这些属性和方法会被跳过 |
synchronized | 方法只能被一个线程同时访问 |
volatile | 属性的值不会被线程本地缓存,始终从“主内存”中读取 |
二. protected:同一包中的类或继承该类的子类可以访问
示例:
1 | class Person { |
extends
是一个关键字,用于表示类的继承关系。当一个类使用 extends
关键字时,它会继承另一个类的属性和方法。
三. static: 用于声明静态成员,表示该成员属于类而不是类的实例
static
和 public
方法之间的区别:
1 | public class Main { |
四. 抽象(abstract)
一个方法属于一个类,并且没有方法体。方法体由子类提供:抽象(abstract)。
解释:
- 抽象方法(abstract method)是没有具体实现的方法,只有方法的声明(包括方法名、参数等),没有方法体。
- 该方法的具体实现由继承该抽象类的子类来提供。
- 在 Java 中,抽象方法通常出现在抽象类(abstract class)中,子类必须重写这些抽象方法才能实例化该子类。
创建两个java文件: hello.java 文件 和 second.java 文件
1 | abstract class hello { |
这个文件不能独立输出
下个文件进行调用:
1 | class Second { // 定义一个名为 Second 的类 |
可能遇到的问题:
有时候头文件名改了,System.out.println
中的fname
和age
发生了报错,无法解析
解决方法:
确保
Student
类继承了Main
类: 如果Student
类应该继承Main
类,并且fname
是Main
类的属性,确保Student
类声明了继承关系如果
Student
没有继承Main
类,则fname
需要在Student
类中定义,或者Second
类中的myObj
需要引用正确的父类。
最终的输出结果:
1 | Name: John |