Java 公共与私有访问修饰符
公共和私有访问修饰符定义了变量、类和方法的作用域,意味着它们决定了类或方法的成员如何被访问。这些修饰符是在声明时与成员关联的。我们知道,这些访问修饰符在Java面向对象的概念中起着重要作用,如封装、多态和继承。它有助于防止成员提供的功能被滥用。在本文中,我们将通过示例程序了解Java中的公共和私有访问修饰符。
Java中的访问修饰符
公共访问修饰符
Java不限制公共成员的访问性。任何声明为public的成员都可以在任何地方访问,这意味着我们可以在类内部以及类外部、以及包内部和包外部进行访问。您可能已经注意到,在Java中,main()方法总是被定义为public,以便位于当前程序范围之外的JVM可以调用它。
公共访问修饰符的一些示例:
public int i1 = 108;
public double d2 = 6.55;
这里,变量被声明为公共。
示例
下面的示例说明了Java中如何使用包成员。
class Pack {
public void prnt() {
// method declared as public
String msg = "I am inside a public method";
System.out.print(msg);
}
}
public class ClassShow extends Pack {
// public child class
public static void main(String args[]) {
// creating object of child class
ClassShow obj = new ClassShow();
// method calling through object of child class
obj.prnt();
}
}
输出
I am inside a public method
在上面的代码中,类 “Pack” 是 “ClassShow” 的父类。在父类中,我们声明了一个名为 “prnt()” 的公共方法来打印一个简单的消息。在子类的 main() 方法中,我们定义了一个子类 “ClassShow” 的对象来调用公共方法 “prnt()”。在这里,子类也是公共的。
私有访问修饰符
当我们将一个类成员声明为私有时,它对于任何代码来说都是不可访问的,包括其子类。我们可以通过使用 private 关键字来实现更高级的封装性。
私有访问修饰符的一些示例:
private int mobNo = 982266;
private double income = 35005.55;
在这里,变量被声明为私有的。
示例
以下示例说明了如果我们在Java中将方法声明为私有的会发生什么。
class Pack {
private void prnt() {
// declaring a method private
String msg = "I am inside a private method";
System.out.print(msg);
}
}
public class ClassShow extends Pack {
public static void main(String args[]) {
// creating object of child class
ClassShow obj = new ClassShow();
// method calling through object of child class
obj.prnt();
}
}
输出
ClassShow.java:12: error: cannot find symbol
obj.prnt();
^
symbol: method prnt()
location: variable obj of type ClassShow
1 error
在这里,我们修改了之前示例中的代码,将public访问修饰符改为private。我们得到了一个编译时错误,因为我们尝试在子类中访问一个私有方法。
公共 vs 私有访问修饰符
从上面的讨论中,我们可以得出公共和私有访问修饰符之间的以下差异:
结论
我们通过定义公共和私有访问修饰符来开始本文,并在后面的章节中,我们通过各自的示例详细解释了它们。最后,我们讨论了它们之间的一些区别。
公开的 | 私有的 |
---|---|
我们需要使用关键字“public”来指定一个成员是公开的。 | 我们需要使用关键字“private”来指定一个成员是私有的。 |
我们可以将任何类定义为公开的。 | 我们不能将顶层类定义为私有的,但是内部类可以。 |
公开成员可以在包内和包外都可以访问。 | 私有成员甚至在同一包内也无法访问。 |
公开成员可以被继承的类访问。 | 私有成员无法被继承的类访问。 |
这适用于顶层和成员级别。 | 这只适用于成员级别。 |