我可以在父类中有一个“受保护”成员并在子类中继承它吗?

Posted

技术标签:

【中文标题】我可以在父类中有一个“受保护”成员并在子类中继承它吗?【英文标题】:Can I have a 'protected' member in a parent class and inherit it in a child class? 【发布时间】:2017-12-08 08:35:45 【问题描述】:

我有admin、customer、supplier 3种用户,都计划继承User类。我可以在User 类中将protected 用于usernamepassword 并在子类中继承它们吗?所有教程似乎都使用private,有什么特殊原因吗?

【问题讨论】:

您应该阅读有关访问修饰符的文档... 你可以。用例取决于您的需求。查看有关修饰符的 C# 教程 “所有教程似乎都使用私有” 我猜您将属性的(支持)字段与属性本身混淆了。属性通常不是私有的,而是字段。 是的。实际上这是保护的唯一目的。 【参考方案1】:

我可以在用户类中对用户名和密码使用protected

是的

你是否应该是另一个问题。如果它们是字段,我个人会说:保留字段 private 并添加 protected property - 或者只是简单地说:

protected string UserName get;set;

或者也许:

protected string UserName get;private set;

如果只有基类能够设置它,或者

protected string UserName get;

如果只有基类应该能够设置它并且只能在构造函数中

旁注:任何关于存储密码(即使是在内存中)的讨论都让我感到紧张。

【讨论】:

鉴于问题的性质,考虑到 OP 可能认为“受保护”意味着密码受到保护:) @HansPassant 不要去那里...拜托 :)

以上是关于我可以在父类中有一个“受保护”成员并在子类中继承它吗?的主要内容,如果未能解决你的问题,请参考以下文章

在父类的子类中访问静态类的受保护成员

我们可以在父类的帮助下访问不同包中的受保护变量吗?

在 kotlin 中,如何从子类访问父类中受保护的静态成员

我可以在 Java 中公开受保护的成员吗?我想从子类访问它

c#如何在父类(或是接口)当中定义一个子类必须要重写的字段(属性)?

Java中的间接子类无法访问的超类中的受保护成员