Java语言提供了四种不同的访问级别,它们分别是:public、protected、default和private。这四种访问级别可以用来控制类、方法和变量的可见性,从而保护代码的安全性和完整性。
public 访问级别是最高的,它表明该成员可以在任何地方被访问。如果一个成员声明为public,那么它就可以在所有的包中使用。
public class Test { public int a; public void method() { System.out.println("This is a public method"); } }
protected 访问级别表明该成员只能在当前包中使用,也可以在子类中使用。如果一个成员声明为protected,那么它就只能在当前包中使用,但是子类也可以使用该成员。
public class Test { protected int a; protected void method() { System.out.println("This is a protected method"); } }
default 访问级别表明该成员只能在当前包中使用。如果一个成员声明为default,那么它就只能在当前包中使用,不能被其他包中的代码所调用。
public class Test { int a; // default access modifier // default access modifier // default access modifier // default access modifier // default access modifier // default access modifier // default access modifier // default access modifier // default access modifier // default access modifier // default access modifier // default access modifier // default access modifier // default access modifier void method() { System.out.println("This is a package-private method"); } }
private 访问级别是最低的,它表明该成员只能在当前类中使用。如果一个成员声明为private,那么它就不能被其他代码所调用。
public class Test { private int a; private void method() { System.out.println("This is a private method"); } }
四种不同的访问权限都有各自独特的作用和意义:public 可以保证代码的开放性和透明性;protected 可以保护代码免于外部干扰而对子类开放;default 可以保证代码不会对外部造成干扰而对内部开放;private 可以保障代码不会对外郩造成干扰而对内郩开放。
类可以是public或default(或包级别)。
类成员的访问级别确定程序的哪个区域可以访问它。以下四个访问级别修饰符之一可以用于类成员:
前三种类型的访问级别使用以下三个关键字之一指定:public,private或protected。
第四种类型称为默认访问级别(或包级别),并且通过不使用访问修饰符来指定。
如果使用 public
关键字将类成员声明为public,则可以从Java代码中的任何位置访问它,如果类本身是可访问的。
如果使用 private
关键字将类成员声明为private,则只能在声明类的主体内访问,而在其他任何地方都不能访问。
如果使用 protected
关键字将类成员声明为protected,则可以从同一个包或从类的后代访问,即使后代位于不同的包中也是如此。
如果我们不为类成员使用任何访问级别修改器,则它具有包级别访问权限。具有包级别访问权限的类成员可以从同一个包访问。
类成员的访问级别可以从最严格到最不严格,作为private,package-level,protected和public。
以下代码显示如何使用不同的访问级别:
public class Main { private int num1; // private access level int num2; // package-level access protected int num3; // protected access level public int num4; // public access level public static int count = 1; // public access level // private access level private void m1() { } // package-level access void m2() { } // protected access level protected void m3() { } // public access level public void m4() { } // private access level private static void doSometing() { } }
可以为类的实例和静态成员指定访问级别。
它是一个约定,指定访问级别修改器作为声明中的第一个修饰符。
要声明静态公共字段,请首先使用 public
修饰符,然后使用 static
修饰符作为约定。
我们必须考虑类及其成员的访问级别,以确定类成员是否可访问。
以下代码显示了如何在创建Java bean时使用访问级别修饰符。
class Account { private double balance; public double getBalance() { return this.balance; } public int save(double amount) { if (amount < 0.0 || Double.isNaN(amount) || Double.isInfinite(amount)) { System.out.println("Invalid credit amount: " + amount); return -1; } this.balance = this.balance + amount; return 1; } public int spend(double amount) { if (amount < 0.0 || Double.isNaN(amount) || Double.isInfinite(amount)) { System.out.println("Invalid debit amount: " + amount); return -1; } if (this.balance < amount) { System.out.println("Insufficient fund. Debit attempted: " + amount); return -1; } this.balance = this.balance - amount; return 1; } } public class Main { public static void main(String[] args) { Account ac = new Account(); double balance = ac.getBalance(); System.out.println("Balance = " + balance); ac.save(2); ac.spend(1); balance = ac.getBalance(); System.out.println("Balance = " + balance); // Attempt to credit and debit invalid amounts ac.save(-2); ac.spend(Double.POSITIVE_INFINITY); balance = ac.getBalance(); System.out.println("Balance = " + balance); // Attempt to debit more than the balance ac.spend(200.00); balance = ac.getBalance(); System.out.println("Balance = " + balance); } }
上面的代码生成以下结果。
Java面向对象设计 - Java Object类Java在java.lang包中有一个Object类。所有Java类都直接或间接扩展Object类。所有Java类都是Obj...
Java面向对象设计 -Java内部类对象局部内部类的对象是使用块中的新运算符创建的,它声明了类。在声明类的同时创建一个匿名类的对...
Java面向对象设计 -Java注释类型标记注释类型标记注释类型是没有元素的注释类型,甚至没有默认值。标记注释由注释处理工具使用。...