Java public vs protected vs package vs private访问修饰符

Java public vs protected vs package vs private访问修饰符

Java具有多种级别的保护,可以精确控制类、子类和包内成员变量和方法的可访问性。访问控制机制依赖于public、protected、private和package等访问修饰符。它们定义了变量、类和方法的范围。我们将了解Java中的各种访问修饰符。

Java中的访问修饰符

public访问修饰符

Java不限制public成员的访问性。任何声明为public的内容都可以在任何地方访问,意味着我们可以在类内部和类外部以及包内部和包外部访问它们。你可能注意到Java中的main()方法总是被定义为public,以便存在于当前程序范围之外的JVM可以调用它。

public访问修饰符的几个示例:

public int i1 = 108;
public double d2 = 6.55;

这里,变量被声明为public。

private修饰符

当我们将一个类成员声明为私有时,它对于其类外部的任何代码,包括其子类,都是不可访问的。我们可以通过使用private关键字来实现更高级别的封装。

私有访问修饰符的几个示例−

private int mobNo = 982266;
private double income = 35005.55;

这里,变量被声明为私有的。

protected 访问修饰符

它在继承的情况下主要用于控制父类成员和相应子类成员的访问。它允许一个元素在当前包之外被访问,但只能被直接的类的子类访问。这里,包是容纳一组类的容器。

受保护访问修饰符的一些示例 –

protected int data1 = 5;
protected double data2 = 5.55;

在这里,变量声明为protected。

package 访问修饰符

它也被称为默认访问修饰符。当我们没有显式地给类和方法指定访问修饰符时,Java编译器会自动将其视为默认或包成员。我们可以在子类和同一个包内的其他类中访问这些成员。

包访问修饰符的几个示例 −

int i1 = 108;
double d2 = 6.55;

在这里,变量可以声明为默认或包级别。

public vs protected vs package vs private访问修饰符

从上面的讨论中,我们可以得出以下这些访问修饰符之间的区别:

可访问区域 public protected package private
同一类内部
同一包的子类内部
同一包的非子类内部
其他包的子类内部
其他包的非子类内部
在上述表中,“是”代表具有指定访问修饰符的成员对于给定区域是可访问的,“否”代表不可访问。

示例1

以下示例演示了Java中public、protected和package修饰符的使用。

class Pack {  
   protected void prnt1() { 
      // method declared as protected
      String msg1 = "I am accessing a protected method";
      System.out.println(msg1);
   }
   public void prnt2() { 
      // method declared as public 
      String msg2 = "I am inside a public method";
      System.out.println(msg2);
   }
   void prnt3() { 
      // method declared as default 
      String msg3 = "I am inside a default method";
      System.out.println(msg3);
   }
}
public class ClassShow extends Pack {  
   public static void main(String args[]) { 
      // object of sub class
      ClassShow obj = new ClassShow();  
      // method calling through object of sub class
      obj.prnt1();  
      obj.prnt2();  
      obj.prnt3();  
   }
}

输出

I am accessing a protected method
I am inside a public method
I am inside a default method

示例2

下面的示例说明了在Java中如果我们将方法声明为private时会发生什么。

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[]) { 
      // object of child class
      ClassShow obj = new ClassShow();  
      // method calling through object of child class
      obj.prnt();
   }  
}

输出

ClassShow.java:13: error: cannot find symbol
      obj.prnt();
         ^
  symbol:   method prnt()
  location: variable obj of type ClassShow
1 error

在这里,我们修改了前一个示例的代码,由于我们尝试在子类中访问私有方法,所以出现了编译时错误。

结论

访问修饰符确定类或方法的成员如何被访问。它们在声明时附加到成员上。在本文中,我们详细解释了所有访问修饰符,并且提供了相应的示例,并且还讨论了其中的一些区别。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程