【问题标题】:can you make a public member of the superclass a protected member in a subclass?你可以让超类的公共成员成为子类中的受保护成员吗?
【发布时间】:2014-01-03 08:05:47
【问题描述】:

就像标题所说的那样,你可以让超类的公共成员成为子类中的受保护成员吗?我今天在考试中遇到了这个问题,而且我对编程还很陌生。你能解释一下吗?

public class Animal {
int lifeExpectancy;
private int weight;
protected gender;
String name;
public String type;
 String genders;

public Animal(int le, int w, char g, String n){
    lifeExpectancy = le;
    gender = g;
    weight = w;
    name = n;
}

这是子类

public class Pet extends Animal{
private String home;
private Boolean biten;
String message;

public Pet(int le, int w, char g, String n, String h, Boolean b) {

    super(le, w, g, n);
    lifeExpectancy = le;
    gender = g;
    weight = w;
    name = n;
    home = h;
    biten = b;



}

【问题讨论】:

  • 写一些代码看看.. :)
  • 哦,对不起,我忘了包括它。 :D
  • 你不明白。他的意思是:写代码自己编译看看。
  • 我做到了,所以如果是或否,我心里有一个答案,另一个问题是是否可以做到,如何做到?

标签: java class subclass public superclass


【解决方案1】:

没有。假设您有 A 扩展了 B,请记住这意味着您始终可以将 A 用作 B

 B b = new A();

因此,A 不能删除或限制 B 所做的任何事情,它只能扩展它。

【讨论】:

  • 谢谢!所以这意味着它也适用于其他人,比如超类中的公共成员使其在子类中成为私有?
  • 正确。请记住,您始终可以将子类用作超类,因此不能做任何事情来破坏它,并且这些继承/覆盖规则中的大多数都变得显而易见。
【解决方案2】:

重写方法:

  • 不得有限制性更强的访问修饰符
  • 可能有一个限制较少的访问修饰符。

限制级别(从最严格的开始):

  1. 私人
  2. 默认
  3. 受保护
  4. 公开

声明成员变量(tutorial):

  • 你会阴影变量

【讨论】:

  • 没有。受保护的是默认 + 其他包中的子类。
【解决方案3】:

在 Java 中,成员是构造函数、字段或方法。

class X1 {
    public int x;
    public X1() {
    }
    public void x () {
    }
}

public class X extends X1 {
    protected int x;
    protected X() {
    }
    protected void x () {
    }
}

编译器在上面只发现一个错误

- Cannot reduce the visibility of the inherited method from X1

而且它不可能允许它。至于构造函数和字段,我们不会更改超类成员的可见性,我们只是声明新成员

【讨论】:

    【解决方案4】:

    您可以只继承属性。就是这样。

    考虑这样一种情况,如果您使用子类代替超类,并且修改了该子类的访问器,则会违反 OOP 规则。

    【讨论】:

      【解决方案5】:

      您不能降低继承项目的可访问性。并且只有实例方法被继承。因此,您可以在具有较低可访问性的子类中重新定义实例或静态属性(不是方法)。

      对于静态方法,尽管它们不是继承的,但您仍然不能放弃可访问性。

      【讨论】:

        猜你喜欢
        • 2011-12-25
        • 2017-08-22
        • 2012-12-01
        • 2018-04-17
        • 1970-01-01
        • 2018-09-03
        • 2022-07-20
        • 2016-08-21
        • 1970-01-01
        相关资源
        最近更新 更多