受保护的(protected)

本文深入探讨了Java中的protected关键字的作用及其在实际项目中的应用价值,解释了如何利用protected关键字实现类成员的封装与继承访问的平衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在,我们已向你介绍完了继承,关键字 protected最终具有了意义。在理想世界中,仅靠

关键字 private 就已经足够了。但在实际项目中,你经常会想要将某些事物尽可能对这个世

界隐藏起来,但仍然允许让导出类的成员访问它们。关键字 protected就是对这一实用主义

的首肯。它指明“就类用户而言,这是 private,但对于任何继承于此类的导出类或其他任何

位于同一个包内的类来说,却是可以进行访问的。”(在 Java 中,protected 也提供了包内访

问权限。)

最好的方式是将数据成员保持为 private;你应当一直保留你“更改底层实现”的权利。然后

你可以通过protected 方法来控制你的类的继承者的访问权限。

 

//:c06:Orc.java

// Theprotected keyword.

import com.bruceeckel.simpletest.*;

import java.util.*;

 

class Villain {

private String name;

protected   void set(String nm) { name = nm; }

public Villain(String name) { this.name = name; }

public String toString() {

return   "I'm a Villain and my name is " + name;

  }

}

 

public  class Orc extends Villain {

private   static Test monitor = new Test();

private   int orcNumber;

public Orc(String name, int orcNumber) {

super(name);

this.orcNumber = orcNumber;

  }

public   void change(String name,    int orcNumber) {

    set(name);   // Available because it's protected

this.orcNumber = orcNumber;

  }

public String toString() {

return   "Orc " + orcNumber + ": " + super.toString();

  }

public   static    void main(String[] args) {

    Orc orc = new Orc("Limburger", 12);

    System.out.println(orc);

    orc.change("Bob", 19);

    System.out.println(orc);

    monitor.expect(new String[] {

"Orc 12:I'm a Villain and my name is Limburger",

"Orc 19:I'm a Villain and my name is Bob"

    });

  }

}   ///:~

你会发现change( )可以访问 set( ),这是因为它是 protected的。你还应注意 orc的 toString()

方法依据 toString( )的基类版本而被定义方式。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值