Java面向对象设计 – Java访问级别成员
类可以是public或default(或包级别)。
类成员的访问级别确定程序的哪个区域可以访问它。以下四个访问级别修饰符之一可以用于类成员:
- public
- private
- protected
- Default 或者 package-level访问
前三种类型的访问级别使用以下三个关键字之一指定: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);
}
}
上面的代码生成以下结果。


国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码













