乐趣区

关于后端:深入理解-Java-修饰符与封装访问权限行为控制与数据隐藏

Java 修饰符

Java 修饰符 用于管制类、属性、办法和构造函数的拜访权限和行为。它们能够分为两组:

  1. 拜访修饰符:
  • public: 意味着代码对所有类可拜访。
  • private: 意味着代码只能在申明的类外部拜访。
  • default: 意味着代码只能在同一包中拜访。
  • protected: 意味着代码在同一包和子类中可拜访。
  1. 非拜访修饰符:
  • final: 意味着类不能被继承,属性和办法不能被重写。
  • static: 意味着属性和办法属于类,而不属于对象。
  • abstract: 意味着类不能用于创建对象,办法没有主体,必须由子类提供。
  • transient: 意味着在序列化蕴含它们的对象时,属性和办法将被跳过。
  • synchronized: 意味着办法一次只能由一个线程拜访。
  • volatile: 意味着属性的值不会在本地线程缓存,总是从“主内存”读取。

示例:

拜访修饰符:

// 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 语言的重要组成部分,它们能够帮忙您控制代码的拜访权限和行为。

以下是一些无关 Java 修饰符的其余重要信息:

  • default 修饰符 也能够称为 package-private 修饰符。
  • protected 修饰符容许子类拜访父类中的成员,但不容许外部类拜访。
  • static 变量和办法也称为 类变量 和 类办法。
  • abstract 类不能被实例化,只能被继承。
  • transient 变量不会被序列化。
  • synchronized 办法能够避免多个线程同时执行。
  • volatile 变量保障每次读取都将获取最新的值。

Java 封装

封装 的含意是确保敏感数据对用户暗藏。为了实现这一点,你须要:

  1. 将类变量 / 属性申明为公有
  2. 提供公共的 get 和 set 办法以拜访和更新公有变量的值

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;}
}

示例解释

  • get 办法返回变量 name 的值。
  • set 办法承受一个参数(newName)并将其调配给 name 变量。关键字 this 用于援用以后对象。

然而,因为 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”

为什么封装?

  • 更好地管制类的属性和办法
  • 类属性能够被设置为只读(如果仅应用 get 办法)或只写(如果仅应用 set 办法)
  • 灵活性:程序员能够更改代码的一部分而不影响其余局部
  • 数据的安全性减少

封装的长处:

  • 进步安全性:暗藏外部实现细节,避免意外批改或拜访敏感数据。
  • 进步代码的模块化:将代码组织成独立的模块,每个模块只裸露必要的接口。
  • 进步代码的可重用性:封装的模块能够被其余代码重用,升高代码的重复性。
  • 进步代码的维护性:易于了解和保护代码,升高代码的复杂度。

一些额定的阐明:

  • 能够应用多个修饰符来润饰 get 和 set 办法,例如 public、protected 和 private。
  • 能够应用 final 修饰符来申明常量,常量不能被批改。
  • 能够应用 static 修饰符来申明静态方法和变量,静态方法和变量属于类,而不是对象。

最初

为了不便其余设施和平台的小伙伴观看往期文章:

微信公众号搜寻:Let us Coding,关注后即可获取最新文章推送

看完如果感觉有帮忙,欢送 点赞、珍藏、关注

退出移动版