Java教程33—Java 访问修饰符public、private、protected和default

在练习java程序时,你必须看过public、private、protected关键字,这些被称为访问修饰符。
访问修饰符是对另一个类中的类,构造函数,数据成员和方法的访问进行一定的限制。
在java中我们有四个访问修饰符:

  1. default
  2. private
  3. protected
  4. public

1.default访问修饰符

当我们没有提到任何访问修饰符时,它被称为default访问修饰符。
此修饰符的范围仅限于包。
这意味着如果我们在包中有一个具有default访问修饰符的类,则只有此包中的那些类才能访问此类。
此程序包外没有其他类可以访问此类。
类似地,如果我们在类中有一个默认方法或数据成员,它将在另一个包的类中不可见。

让我们看一个例子来理解这个:
在这个例子中我们有两个类,Test类试图访问Addition类的默认方法,因为类Test属于不同的包。
这个程序会抛出编译错误,因为默认修饰符的范围仅限于同一个包中宣布它。
Addition.java

package abcpackage;

public class Addition {
    /* 因为未加限定符
     * 被认为是default.
     */
    int addTwoNumbers(int a, int b){
        return a+b;
    }
}

Test.java

package xyzpackage;

/* 导入了包但是仍报错
 * 因为尝试使用default限定的成员
 */
import abcpackage.*;
public class Test {
    public static void main(String args[]){
        Addition obj = new Addition();
        /* 将会抛出异常,因为尝试使用default方法
         */
        obj.addTwoNumbers(10, 21);
    }
}

Output:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method addTwoNumbers(int, int) from the type Addition is not visible
at xyzpackage.Test.main(Test.java:12)

2.private访问修饰符

private修饰符的范围仅限于类。

私有数据成员和方法只能在类中访问
类和接口不能声明为私有
如果一个类有私有构造函数,那么你就无法从类外部创建该类的对象。
让我们看一个例子来理解这个:

此示例抛出编译错误,因为我们尝试在类Example中访问类ABC的私有数据成员和方法。
私有数据成员和方法只能在类中访问:

class ABC{
    private double num = 100;
    private int square(int a){
        return a*a;
    }
}
public class Example{
    public static void main(String args[]){
        ABC obj = new ABC();
        System.out.println(obj.num);
        System.out.println(obj.square(10));
    }
}

Output:

    Compile - time error

3.protected访问修饰符

protected数据成员和方法只能由同一个包的类和任何包中的子类访问
您还可以说protected访问修饰符类似于默认访问修饰符,但有一个例外,它在子类中具有可见性。
类不能声明为protected。
此访问修饰符通常用于父子关系。

Java中的protected访问修饰符示例
在此示例中,另一个包中存在的类Test能够调用addTwoNumbers()声明protected方法。
这是因为Test类扩展了类Addition,而protected修饰符允许访问子类中的protected成员(在任何包中)。

Addition.java

package abcpackage;
public class Addition {

    protected int addTwoNumbers(int a, int b){
        return a+b;
    }
}

Test.java

package xyzpackage;
import abcpackage.*;
class Test extends Addition{
    public static void main(String args[]){
        Test obj = new Test();
        System.out.println(obj.addTwoNumbers(11, 22));
    }
}
Output:

33

4.public访问修饰符

可以从任何地方访问声明为public的成员,方法和类。
此修饰符不对访问权限施加任何限制。
java中的public访问修饰符示例
让我们看一下上面看到的相同的例子,但这次方法addTwoNumbers()有public修饰符,类Test能够访问这个方法,甚至不需要扩展Addition类。
这是因为public修饰符随处可见。

Addition.java

package abcpackage;

public class Addition {

    public int addTwoNumbers(int a, int b){
        return a+b;
    }
}

Test.java

package xyzpackage;
import abcpackage.*;
class Test{
    public static void main(String args[]){
        Addition obj = new Addition();
        System.out.println(obj.addTwoNumbers(100, 1));
    }
}
Output:

101

让我们以表格形式查看这些访问修饰符的范围:

这里写图片描述


原文地址:

https://beginnersbook.com/2013/05/java-access-modifiers/

猜你喜欢

转载自blog.csdn.net/y396397735/article/details/82727605