Java中protected字段的访问控制

简短一句话说明:Java中protected字段可以被同包的类访问
解释:子类通过继承,可以在自己类中访问自己的protected字段,但是不能访问异包类的protected字段即使是自己的超类)。

示例说明如下:
Person是被用来继承的超类;WPerson是与Person同包、继承Person的子类;Tiger是与Person同包、没有继承关系的类;Theater是与Person异包,继承Person的子类。
为了测试,在Person中设计了一个protected类型的变量age;在每个类里面创建了一个方法,叫做doSth()。
在WPerson与Tiger类中,都是直接可以访问Person对象的protected字段(age)的;在Teacher中不能直接访问Person类的protected字段(age),但是可以访问自己的age字段。
具体的代码如下:

  1. Person类(起超类作用),定义了一个protected类型字段
package cn.beixiansheng.learning.Topic001;

public class Person {

    protected int age;
    private String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  1. WPerson 同包的子类,可以对其超类protected字段访问
package cn.beixiansheng.learning.Topic001;

public class WPerson extends Person {
    public void doSth() {
        this.age = 490;
        Person person = new Person();
        person.age = 16;
        person.setAge(17);
    }
}
  1. Teacher,异包的子类,可以访问自己从超类继承过来的protected字段,但是不能访问超类的protected字段
package cn.beixiansheng.learning.Topic001.childpackage;

import cn.beixiansheng.learning.Topic001.Person;

public class Teacher extends Person {
    public void doSth() {
        this.age = 15;
        Person student = new Person();
        // 错误使用,不能获取到
        // student.age = 12;
        // 正确使用方法
        student.setAge(12);
    }
}
  1. Tiger,同包无继承关系的类,可以访问protected字段类
package cn.beixiansheng.learning.Topic001;

public class Tiger {
    public void doSth () {
        Person person = new Person();
        person.age = 15;
    }
}

代码的位置:
GitHub上代码

参考资料:
[1] Java核心技术 卷Ⅰ (原书第11版),中文版,173页,5.1.10受保护的访问

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: protected和private是Java访问修饰符。 private表示私有的,只能在当前类访问,其他类无法访问protected表示受保护的,只能在当前类和其子类访问,其他类无法访问。 ### 回答2: Javaprotected和private都是访问修饰符,用于控制类成员(字段和方法)的可见性。 private是最严格的访问修饰符,只有在当前类可见。它声明的成员只能在声明的类访问,其他类无法直接访问。private修饰的字段可以通过提供公共的getter和setter方法来被外部类间接地访问和修改。通过使用private,可以确保数据的封装性,防止外部类对内部实现的直接访问,提高了代码的安全性和可维护性。 protected的可见性比private略宽松。protected修饰的成员在本可见,同时也可被子访问。这样可以确保在继承关系,子类可以对父类的成员进行访问和操作,实现了继承的共享性。与private不同,protected修饰的字段允许直接在子类访问和修改,不需要提供额外的getter和setter方法。 总结: - private:只在当前类可见,外部类无法直接访问。 - protected:在本和子类可见,可以在子类直接访问。 选择使用private或protected要根据具体的需求和设计考虑。一般来说,应尽量使用private来保护成员的封装性,只在有必要的情况下使用protected来实现继承的共享性。 ### 回答3: 在Javaprotected和private是两种访问修饰符,用于限制类的成员的访问范围。 private是一种较为严格的访问修饰符,用于修饰类的成员(变量、方法或构造函数)。使用private修饰的成员对于类的外部是不可见的,只能在当前类的内部被访问和使用。这种访问权限的限制通常用于封装类的内部细节,保护数据安全性。在private修饰的成员只能使用类的内部来访问,不能通过类的对象来访问protected是一种等限制的访问修饰符,也用于修饰类的成员。使用protected修饰的成员可以在同一内的其他类访问,也可以在不同的子类访问。这种访问权限通常用于继承关系的成员的访问,可以在继承树的子类进行访问和使用。与private修饰相比,protected修饰的成员对于外部类具有一定的可见性。 总结来说,private修饰的成员只能在当前类的内部访问protected修饰的成员可以在同一内的其他类和不同的子类访问。这两种访问修饰符用于控制类的成员的可见性,确保程序的安全性和封装性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值