与标题所说的一样,您是否可以使超类的公共成员成为子类中的受保护成员?今天我的考试中有这个问题,而且我对编程很新。你能解释一下吗?
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;
}
答案 0 :(得分:4)
没有。假设您A
延长了B
,请记住,这意味着您始终可以A
作为B
。
B b = new A();
因此A
不能删除或限制B
所做的任何内容,只能扩展。
答案 1 :(得分:1)
Overriden方法:
限制水平(来自最严格的限制):
声明成员变量(tutorial):
答案 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)
您无法减少继承项的可访问性。并且只继承实例方法。因此,您可以在具有较低可访问性的子类中重新定义实例或静态属性(而不是方法)。
对于静态方法,尽管它们没有被继承,但仍然无法删除可访问性。