我尝试了下面的代码,根据它,我理解内部类继承到OuterClass的子类。是正确的吗?
class Outter{
int i=1;
class Inner{
int i=2;
public void hello(){
System.out.println("hello from outter.inner");
}
}
}
class ChildClass extends Outter{
class ChildInner{
}
}
public class Classes {
public static void main(String[] args) {
Inner inner = (new ChildClass()).new Inner();
System.out.println(inner.i);
inner.hello();
}
}
输出除外:
2.
奥特你好。内部的
Inner inner = (new ChildClass()).new Inner();
当这行代码运行时,它应该意味着内部类被继承给了ChildClass
我很困惑,因为我在链接上发现了下面的语句
当外部类由其子类扩展时,成员内部类将不会继承到子类。若要在外部类的子类内使用内部类属性,子类还必须具有内部类,并且该内部类必须扩展外部类的内部类。
声明:
Inner inner = (new ChildClass()).new Inner();
不是真正继承到ChildClass
如果你打破它,你基本上是这样做的:
ChildClass child = new ChildClass();
Inner inner = child.new Inner();
现在,您可以在ChildClass上调用new()
,因为它扩展了Outter
这并不意味着ChildClass
可以调用internal
中的任何方法/属性,仅仅因为internal
是Outter
的一部分
因此,我将用一个例子来说明这一说法:
当外部类由其子类扩展时,成员内部类将不会继承到子类。若要在外部类的子类内使用内部类属性,子类还必须具有内部类,并且该内部类必须扩展外部类的内部类。
class Outter {
void method(){
Inner test=new Inner();
test.i=5; //No problem to do that even if i is private because it is inner class
}
class Inner {
private int i = 2;
}
}
class ChildClass extends Outter{
void method2(){
Inner test=new Inner();
test.i=5; //Does not compile
}
}
您不能访问子类中的“i”。如果你也在那里延伸内部,你可以:
class ChildClass extends Outter{
void method2(){
Inner2 test=new Inner2();
test.i=5; //Compiles fine because we have also extended the inner class (like written in the quoted text)
}
class Inner2 extends Inner{ }
}
快速提问,我正在学习接口和继承。 这不是实际的代码,只是一个例子。假设我有抽象类“动物”。对马和犬类等组有一些继承。还有一个接口“宠物”。它将用于动物的不同子类。犬类“狗”的子类实现了接口“宠物”。因此“狗”的所有子类也实现了接口“宠物”,而不必在“狗”的每个子类上单独实现“宠物”,对吗?
我有一个类“C”,它有一个内部类“Ci”。“C”类继承了“S”类。“S”类也有一个内部类“Si”。“Ci”能继承“Si”吗?非常感谢任何回应的人。 这样的事情可能吗?
问题内容: 限制条件: 我有一个编写的Maven源代码生成器,它是从具有嵌套名称空间的某些数据文件创建POJO类的。我希望每个名称空间都嵌套为一个内部类。在某些情况下,我最终会得到内部类,这些内部类与最外部类的简单名称相同。 所有类都必须是作用域,因为这是对类型安全包装器的覆盖,例如属性文件,但是是分层的。 我不能更改名称,否则我将更改名称含义和包含数据的名称空间。 给出比我有以下代码: 内部类应
我知道如果我想扩展内部类,我应该这样做: 但是在这种情况下,我不明白该怎么办?如何获取内部对象的封闭实例? 此变体不编译:
我正在阅读关于从内部类继承的内容,我一直在努力理解下面的代码是如何工作的: 据我所知,关键字Super指的是超类,Super()指的是它没有参数构造函数。在外层类的情况下,超类是Object类。 我想了解一下,这段代码是如何工作的。 为什么Object类的实例化使扩展内部类成为可能? 创建Object类实例与创建外层类对象有什么关系? 删除包含"o.super();"的行会导致错误: java:包
问题内容: 我读过一个子类不能继承私有字段或方法。但是,在这个例子中 运行时,输出为。似乎是从继承了private属性。 所以,请解释这里发生了什么。谢谢。 问题答案: 子类具有其超类的字段,但不能直接访问它们。同样,子类“具有”私有方法,但是您不能直接从子类中调用或重写它们。 在有关继承的Java文档中,它说 子类并 没有 继承父类的私有成员。 但是,我认为将其视为 子类继承其父类的私有成员,但