
Java 修饰符 用于控制类、属性、方法和构造函数的访问权限和行为。它们可以分为两组:
示例:
访问修饰符:
// public类可以被任何类访问
public class Main {
// private属性只能在 Main 类内部访问
private int x = 10;
// default方法只能在同一个包中访问
void myMethod() {
System.out.println("This is a default method.");
}
// protected方法可以在同一个包和子类中访问
protected void myProtectedMethod() {
System.out.println("This is a protected method.");
}
public static void main(String[] args) {
Main myObj = new Main();
System.out.println(myObj.x); // 错误,无法访问私有属性
myObj.myMethod(); // 可以访问 default 方法
myObj.myProtectedMethod(); // 可以访问 protected 方法
}
}非访问修饰符:
public class Main {
// final属性不能被修改
final int y = 20;
// static方法可以在不创建对象的情况下访问
static void myStaticMethod() {
System.out.println("This is a static method.");
}
// abstract方法没有主体,必须由子类提供
abstract void myAbstractMethod();
public static void main(String[] args) {
// y = 30; // 错误,无法修改 final 属性
myStaticMethod(); // 可以访问 static 方法
// myAbstractMethod(); // 错误,无法直接调用抽象方法
}
}
// 子类继承 Main 类并提供抽象方法的主体
class Child extends Main {
@Override
void myAbstractMethod() {
System.out.println("This is the implementation of myAbstractMethod.");
}
}一些额外的说明:
public final 表示类是公开的并且不能被继承。以下是一些有关 Java 修饰符的其他重要信息:
封装 的含义是确保敏感数据对用户隐藏。为了实现这一点,你需要:
Get 和 Set 方法
私有变量只能在同一类中访问(外部类无法访问)。但是,如果我们提供了公共的 get 和 set 方法,就可以访问它们。
get 方法 返回变量值,而 set 方法 设置值。
两者的语法是它们都以 get 或 set 开头,后面跟着变量的名称,首字母大写:
public class Person {
private String name; // private = 受限制的访问
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}示例解释
然而,由于 name 变量被声明为私有,我们无法从此类外部访问它:
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.name = "John"; // 错误
System.out.println(myObj.name); // 错误
}
}如果变量被声明为 public,我们期望以下输出:
John然而,由于我们尝试访问一个私有变量,我们得到一个错误:
MyClass.java:4: error: name has private access in Person
myObj.name = "John";
^
MyClass.java
:5: error: name has private access in Person
System.out.println(myObj.name);
^
2 errors相反,我们使用 getName() 和 setName() 方法来访问和更新变量:
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.setName("John"); // 将 name 变量的值设置为 "John"
System.out.println(myObj.getName());
}
}// 输出 "John"
为什么封装?
封装的优点:
一些额外的说明:
看完如果觉得有帮助,欢迎 点赞、收藏、关注
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。