Suj*_*dal 2 java subclass private-constructor
我读到,从构造函数是私有的类创建子类是不可能的,但奇怪的是我能够做到这一点,这个代码片段还有更多内容吗?
请有人提供易于理解和满意的解释.
public class app {
public static void main(String[] args) {
app ref = new app();
myInheritedClass myVal = ref.new myInheritedClass(10);
myVal.show();
}
int myValue = 100;
class myClass {
int data;
private myClass(int data) {
this.data = data;
}
}
class myInheritedClass extends myClass {
public myInheritedClass(int data) {
super(data);
}
public void show() {
System.out.println(data);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在https://www.compilejava.net/上运行了这个片段,输出为10.
因为您的类都是嵌套类(在您的情况下,特别是内部类),这意味着它们都是包含类的一部分,因此可以访问包含类的所有私有事物,包括彼此的私有位.
如果它们不是嵌套类,则无法访问子类中的超类私有构造函数.
有关Oracle Java站点上嵌套类教程中嵌套类的更多信息.
这是编译,因为A
它B
是内部类,它们是嵌套类(实时副本):
class Example
{
public static void main (String[] args) throws java.lang.Exception
{
System.out.println("Ran at " + new java.util.Date());
}
class A {
private A() {
}
}
class B extends A {
private B() {
super();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是编译,因为A
并且B
是静态嵌套类(实时副本):
class Example
{
public static void main (String[] args) throws java.lang.Exception
{
System.out.println("Ran at " + new java.util.Date());
}
static class A {
private A() {
}
}
static class B extends A {
private B() {
super();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这不会编译因为A
构造函数是私有的; B
无法访问它(Example
在这种情况下我真的不需要,但我已将它包含在上面的两个中,所以对于上下文...)(实时拷贝):
class Example
{
public static void main (String[] args) throws java.lang.Exception
{
System.out.println("Ran at " + new java.util.Date());
}
}
class A {
private A() {
}
}
class B extends A {
private B() {
super(); // COMPILATION FAILS HERE
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
141 次 |
最近记录: |