Joh*_*ith 0 java inner-classes
我很困惑
Abstract Class A{method();method2();}
Run Code Online (Sandbox Code Playgroud)
和其他Class B有内在的Class C
Class B{Abstract Class C{method(){//body}}}
Run Code Online (Sandbox Code Playgroud)
现在问题是如何扩展C类B/C抽象类必须扩展,否则这是Unused类.
首先,让我们简单一点 - 这与Android没有直接关系,你根本不需要你的A课程.这是你想要的:
class Outer {
abstract class Inner {
}
}
class Child extends Outer.Inner {
}
Run Code Online (Sandbox Code Playgroud)
这并不编译,因为当你创建一个实例Child,你需要提供的实例Outer的Inner构造函数:
Test.java:6: error: an enclosing instance that contains Outer.Inner is required
class Child extends Outer.Inner {
^
1 error
Run Code Online (Sandbox Code Playgroud)
有两个选项可以解决这个问题:
如果您不需要引用Outerfrom 的隐式实例Inner,则可以Inner改为创建静态嵌套类:
static abstract class Inner {
}
Run Code Online (Sandbox Code Playgroud)您可以更改Child为接受对实例的引用Outer,并使用它来调用Inner构造函数,该构造函数使用稍微令人惊讶的语法,但有效:
Child(Outer outer) {
// Calls Inner constructor, providing
// outer as the containing instance
outer.super();
}
Run Code Online (Sandbox Code Playgroud)请注意,这些是替代方案 - 您应该根据内部类是否真的需要成为内部类来选择您想要的那个.
| 归档时间: |
|
| 查看次数: |
2280 次 |
| 最近记录: |