ToB企服应用市场:ToB评测及商务社交产业平台

标题: 深入理解 Java 修饰符与封装:访问权限、行为控制与数据隐藏 [打印本页]

作者: 北冰洋以北    时间: 2024-5-10 20:40
标题: 深入理解 Java 修饰符与封装:访问权限、行为控制与数据隐藏
Java 修饰符

Java 修饰符 用于控制类、属性、方法和构造函数的访问权限和行为。它们可以分为两组:


示例:
访问修饰符:
  1. // public类可以被任何类访问
  2. public class Main {
  3.   // private属性只能在 Main 类内部访问
  4.   private int x = 10;
  5.   // default方法只能在同一个包中访问
  6.   void myMethod() {
  7.     System.out.println("This is a default method.");
  8.   }
  9.   // protected方法可以在同一个包和子类中访问
  10.   protected void myProtectedMethod() {
  11.     System.out.println("This is a protected method.");
  12.   }
  13.   public static void main(String[] args) {
  14.     Main myObj = new Main();
  15.     System.out.println(myObj.x); // 错误,无法访问私有属性
  16.     myObj.myMethod(); // 可以访问 default 方法
  17.     myObj.myProtectedMethod(); // 可以访问 protected 方法
  18.   }
  19. }
复制代码
非访问修饰符:
  1. public class Main {
  2.   // final属性不能被修改
  3.   final int y = 20;
  4.   // static方法可以在不创建对象的情况下访问
  5.   static void myStaticMethod() {
  6.     System.out.println("This is a static method.");
  7.   }
  8.   // abstract方法没有主体,必须由子类提供
  9.   abstract void myAbstractMethod();
  10.   public static void main(String[] args) {
  11.     // y = 30; // 错误,无法修改 final 属性
  12.     myStaticMethod(); // 可以访问 static 方法
  13.     // myAbstractMethod(); // 错误,无法直接调用抽象方法
  14.   }
  15. }
  16. // 子类继承 Main 类并提供抽象方法的主体
  17. class Child extends Main {
  18.   @Override
  19.   void myAbstractMethod() {
  20.     System.out.println("This is the implementation of myAbstractMethod.");
  21.   }
  22. }
复制代码
一些额外的说明:
以下是一些有关 Java 修饰符的其他重要信息:
Java 封装

封装 的含义是确保敏感数据对用户隐藏。为了实现这一点,你需要:
Get 和 Set 方法
私有变量只能在同一类中访问(外部类无法访问)。但是,如果我们提供了公共的 get 和 set 方法,就可以访问它们。
get 方法 返回变量值,而 set 方法 设置值。
两者的语法是它们都以 get 或 set 开头,后面跟着变量的名称,首字母大写:
  1. public class Person {
  2.   private String name; // private = 受限制的访问
  3.   // Getter
  4.   public String getName() {
  5.     return name;
  6.   }
  7.   // Setter
  8.   public void setName(String newName) {
  9.     this.name = newName;
  10.   }
  11. }
复制代码
示例解释
然而,由于 name 变量被声明为私有,我们无法从此类外部访问它:
  1. public class Main {
  2.   public static void main(String[] args) {
  3.     Person myObj = new Person();
  4.     myObj.name = "John"; // 错误
  5.     System.out.println(myObj.name); // 错误
  6.   }
  7. }
复制代码
如果变量被声明为 public,我们期望以下输出:
  1. John
复制代码
然而,由于我们尝试访问一个私有变量,我们得到一个错误:
  1. MyClass.java:4: error: name has private access in Person
  2.   myObj.name = "John";
  3.     ^
  4. MyClass.java
  5. :5: error: name has private access in Person
  6.     System.out.println(myObj.name);
  7.         ^
  8. 2 errors
复制代码
相反,我们使用 getName() 和 setName() 方法来访问和更新变量:
  1. public class Main {
  2.   public static void main(String[] args) {
  3.     Person myObj = new Person();
  4.     myObj.setName("John"); // 将 name 变量的值设置为 "John"
  5.     System.out.println(myObj.getName());
  6.   }
  7. }
复制代码
// 输出 "John"
为什么封装?
封装的优点:
一些额外的说明:
最后

为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4