【Java基础】访问修饰符的作用域

目录

访问修饰符类型

public

private

protected

default

访问修饰符表格


访问修饰符类型

public

public修饰的变量,类,接口和方法可以被其他所有类访问,不受任何限制。

package abc;

// public修饰的类
public class Addition {
    // public修饰的变量
    public int a; 
    public int b;

    //public修饰的方法
    public int addTwoNumber() { 
        return a + b;
    }
}
package xyz;

import abc.Addition;

public class Test {
    public static void main(String[] args) {
        Addition addition = new Addition();
        addition.a = 1;
        addition.b = 2;
        System.out.println(addition.addTwoNumber());
    }
}

private

  1. private修饰的变量和方法只能在当前类使用
  2. 外部类和接口不能使用private修饰符
  3. 如果一个类有private修饰的构造方法,那么其他类不能实例化该类

例子中的代码会抛出异常,试试将private改成public然后运行以下

package abc;

public class PrivateAccess {
    public static void main(String[] args) {
        Example example = new Example();
        example.name = "xiaohong";
        example.printName();
    }
}

class Example{
    //private修饰的变量
    private String name = "xiaoming";

    //private修饰的方法
    private void printName(){
        System.out.println(name);
    }
}

 private修饰的构造方法不能被实例化对象,会抛出异常,试试将private改成public运行一下

package abc;

public class PrivateAccess {
    public static void main(String[] args) {
        Example example = new Example("xiaoming", 11);

    }
}

class Example{
    String name;
    int age;

    private Example(String name, int age){
        this.name = name;
        this.age= age;
    }
}

protected

  1. protected修饰的变量和方法能被在同一包和任何其他包的子类访问
  2. protected不能修饰外部类,该修饰符一般用于继承关系
package abc;

public class ProtectedAccessParent {
    protected int a;
    protected int b;

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

import abc.ProtectedAccessParent;

class ProtectedAccessChild extends ProtectedAccessParent {
    public static void main(String[] args) {
        ProtectedAccessChild p = new ProtectedAccessChild();
        p.a = 1;
        p.b = 2;
        System.out.println(p.addTwoNumbers());
    }
}

default

  1. 不使用任何修饰符,其实默认修饰符和public修饰符类似,只是作用访问范围在当前包内
  2. 默认修饰的变量,类,接口和方法可以被同一个包下其他所有类访问

下面的示例会抛出异常,你可以把这个类DefaultAccessTest 放到abc这个包下然后运行

package abc;

class DefaultAccess {
    int a;
    int b;

    int addTwoNumber() {
        return a + b;
    }
}
package xyz;

import abc.DefaultAccess;

public class DefaultAccessTest {
    public static void main(String[] args) {
        DefaultAccess d = new DefaultAccess();
        d.a = 1;
        d.b = 2;
        System.out.println(d.addTwoNumber());
    }
}

访问修饰符表格

访问修饰符当前类同包子类同包非子类不同包子类不同包非子类
publicYesYesYesYesYes
protectedYesYesYesYesNo
defaultYesYesYesNoNo
privateYesNoNoNoNo

修饰范围从小到大:private->default->protected->public

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值