Java 您可以将超类的公共成员设置为子类中的受保护成员吗?

Java 您可以将超类的公共成员设置为子类中的受保护成员吗?,java,class,subclass,public,superclass,Java,Class,Subclass,Public,Superclass,就像标题所说的,你能让超类的公共成员成为子类中受保护的成员吗?我在今天的考试中遇到了这个问题,我对编程相当陌生。你能解释一下怎么做吗 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){

就像标题所说的,你能让超类的公共成员成为子类中受保护的成员吗?我在今天的考试中遇到了这个问题,我对编程相当陌生。你能解释一下怎么做吗

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;



}
不,假设你有A和B,记住这意味着你可以用A作为B


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

您只需继承属性即可。就这样

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

重写方法:

不能有更严格的访问修饰符 可能具有限制性较小的访问修饰符。 来自最严格限制的限制级别:

私有的 平息 受保护的 平民的 声明成员变量:

您将对变量进行阴影处理
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

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

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


对于静态方法,您仍然无法删除可访问性,尽管它们不是继承的。

编写一些代码,请参阅..:哦,很抱歉,我忘了包括在内你不明白。他的意思是:编写代码并自己编译以查看。我这样做了,所以我有一个答案,如果是或否,另一个问题是它是否可以完成,如何完成?否。在其他包中作为默认+子类进行保护。谢谢!这意味着它也适用于其他人,比如超类中的公共成员,使其在子类中成为私有的?正确。请记住,您总是可以将子类用作超类,因此不能做任何事情来打破这一点,并且这些继承/重写规则中的大多数变得显而易见。
- Cannot reduce the visibility of the inherited method from X1