【发布时间】:2015-10-19 00:16:43
【问题描述】:
我有三个这样的课程:
public abstract class ClassA extends ClassX {
protected ClassA() {
super();
}
// more code
}
public class ClassB extends ClassA {
public ClassB() {
super();
}
// more code
}
public abstract class ClassC extends ClassB {
public ClassC() {
super();
}
// more code
}
我想说ClassC 的标准构造函数不是必需的,因为Java 会在编译期间插入它,因为此类中没有其他构造函数,对吧?
如果属实,我可以将ClassC 的代码简化为:
public abstract class ClassC extends ClassB {
// more code
}
现在我想说我不能对ClassB 做同样的事情,因为构造函数的可访问性从protected 增加到public。
我之所以这么问,是因为我对此不是 100% 确定,并认为我可能会遗漏一些东西。特别是关于将插入ClassC 的标准构造函数,如果我自己不实现它。在这种情况下,它将具有可访问性 public,因为它继承自 ClassB。对吗?
所以我的问题是:我可以在不更改代码的情况下删除 ClassC 中的构造函数(尤其是构造函数的可访问性)吗?我不能删除 ClassB 的构造函数是否正确。
【问题讨论】:
-
您可能应该提出单独的问题 :)
-
长话短说。你的假设似乎是正确的
-
你是对的 :-)。所以我的问题主要是:我可以在不更改代码的情况下删除 ClassC 中的构造函数吗(将编辑问题)。
-
我不确定你的意思是什么: > 现在我想说我不能对 ClassB 做同样的事情,因为构造函数的可访问性从受保护增加到公共。默认构造函数是包私有的。
-
@RazvanManolescu:如果默认构造函数是包私有的,那意味着,如果我删除 ClassC 的构造函数,java 将不会添加默认构造函数,因为它不能具有较低的可访问性(包私有),或者它将添加一个不是包私有而是公共的构造函数(因为它必须等于或高于它的父级)。你会说Java插入哪一个?
标签: java inheritance access-modifiers