Java Access 更新
Java是一种面向对象的编程语言,提供了四种访问修饰符来控制类、方法和变量的访问级别。这四种访问修饰符分别是public
、private
、protected
和默认的(即不使用任何修饰符)。
访问修饰符决定了其他类是否可以访问某个类、方法或变量。在Java中,访问级别是从高到低排列的,即public
是最高级别的,而默认的是最低级别的。
-
public
:使用public
修饰的成员可以被任何其他类访问。这是最高级别的访问权限,也是最常用的访问修饰符。 -
private
:使用private
修饰的成员只能在所属类内部访问。这是最低级别的访问权限,用于限制对类的内部实现的访问。 -
protected
:使用protected
修饰的成员可以被同一个包内的类访问,以及其他包中的子类访问。这个访问级别在继承关系中很有用。 -
默认的访问级别:如果没有使用任何访问修饰符来修饰类、方法或变量,则它们具有默认的访问级别。在类成员的访问控制中,与
protected
类似,但默认的访问级别没有继承关系的限制。
下面我们通过一些代码示例来演示这些访问修饰符的使用。
首先,我们创建一个名为 Person
的公共类,在这个类中定义了一个公共字段 name
和一个私有方法 sayHello
:
public class Person {
public String name; // 公共字段
private void sayHello() { // 私有方法
System.out.println("Hello, my name is " + name);
}
}
接下来,我们创建一个名为 Main
的类,在这个类中实例化 Person
类,并访问其公共字段和私有方法:
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.name = "John"; // 访问公共字段
System.out.println(person.name); // 输出:John
person.sayHello(); // 编译错误,无法访问私有方法
}
}
在上面的示例中,我们可以看到,由于name
字段被声明为公共的,我们可以在 Main
类中直接访问该字段,并将其值设置为John
。而对于 sayHello
方法,由于它被声明为私有的,我们无法在 Main
类中直接调用它。
接下来,我们尝试在不同的包中使用 protected
访问修饰符。
我们首先在 com.example
包中创建一个名为 Animal
的类,其中定义了一个受保护的方法 makeSound
:
package com.example;
public class Animal {
protected void makeSound() {
System.out.println("The animal makes a sound");
}
}
然后,在另一个包 com.example.subpackage
中创建一个名为 Dog
的类,它继承自 Animal
类,并重写了 makeSound
方法:
package com.example.subpackage;
import com.example.Animal;
public class Dog extends Animal {
@Override
protected void makeSound() {
System.out.println("The dog barks");
}
}
最后,在 Main
类中创建一个 Dog
类的实例,并调用其 makeSound
方法:
import com.example.subpackage.Dog;
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound(); // 输出:The dog barks
}
}
在上面的示例中,我们可以看到,虽然 makeSound
方法在 Animal
类中被声明为受保护的,但是由于 Dog
类继承自 Animal
类,并且在同一个包中,所以我们可以在 Dog
类中重写该方法,并在 Main
类中调用 Dog
类的实例