你能让超类的公共成员成为子类中的受保护成员吗?

时间:2014-01-03 08:05:48

标签: 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){
    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;



}

5 个答案:

答案 0 :(得分:4)

没有。假设您A延长了B,请记住,这意味着您始终可以A作为B

 B b = new A();

因此A不能删除或限制B所做的任何内容,只能扩展

答案 1 :(得分:1)

Overriden方法:

  • 不得拥有限制性更强的访问修饰符
  • 可能限制性较小的访问修饰符。

限制水平(来自最严格的限制):

  1. 私有
  2. defualt
  3. 保护
  4. 公共
  5. 声明成员变量(tutorial):

    • 你将 shadow 变量

答案 2 :(得分:1)

在Java中,Member是Constructor,Field或Method。

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

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

答案 3 :(得分:0)

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

考虑一个案例,如果您使用子类代替超类并修改了该子类的访问器,则会破坏OOP规则。

答案 4 :(得分:0)

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

对于静态方法,尽管它们没有被继承,但仍然无法删除可访问性。