Java中存在一些内部类扩展外部类的情况.
例如,java.awt.geom.Arc2D.Float是java.awt.geom.Arc2D的内部类,并且还扩展了Arc2D.(参见http://download.oracle.com/javase/6/docs/api/java/awt/geom/Arc2D.Float.html)
此外,sun.org.mozilla.javascript.internal.FunctionNode.Jump扩展了sun.org.mozilla.javascript.internal.Node,它是FunctionNode的超类.(抱歉......找不到javadoc的链接)
对我来说,这似乎很奇怪.你能创建这些吗?
new Arc2D.Float.Float() //n.b. I couldn't get this to compile in Intellij IDEA;
new FunctionNode.Jump.Jump.Jump(1); // I could get this to compile
Run Code Online (Sandbox Code Playgroud)
将子类嵌套为超类的内部类有什么作用?
我想知道是否要访问超类中的某些东西,但是如果你想访问父类中的任何变量/方法,你可以使用
super.variable;
Run Code Online (Sandbox Code Playgroud)
要么
super.method();
Run Code Online (Sandbox Code Playgroud)
编辑1:jjnguy建议将逻辑保持在同一个地方.在这种情况下,为什么不写一个文件com.mypackage.AbstractTest:
abstract class AbstractTest {
abstract String getString();
}
class ExtensionTest extends AbstractTest {
@Override
String getString() {
return "hello world";
}
}
Run Code Online (Sandbox Code Playgroud)
... 而不是:
abstract class AbstractTest {
abstract String getString();
class ExtensionTest extends AbstractTest {
@Override
String getString() {
return "hello world";
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑2:正确地指出我之前编辑中的建议存在缺陷,因为无法在包之外构建ExtensionTest.但是,周末我对此有了进一步的考虑,那么下面呢: …
假设我有:
public class OuterClass() {
public class InnerClass {
public void someMethod(int x) {
someMethod(x);
}
}
public void someMethod(int x) {
System.out.println(x);
}
}
Run Code Online (Sandbox Code Playgroud)
如何解决someMethod()外部类和someMethod()内部类之间的歧义?
是否可以从AsyncTask中调用不是调用Activity类的内部类来获取对启动执行AsyncTask的Activity实例的引用?
我知道这个线程,但它并没有完全解决如何引用调用Activity.有人建议将对Activity的引用作为参数传递给AsyncTask构造函数,但据报道,这样做总会导致NullPointerException.
所以,我很茫然.我的AsyncTask提供了强大的功能,我不想在每个想要使用它的Activity 中将它复制为内部类.必须有一个优雅的解决方案.
C++
如何将内部(嵌套)类的定义置于其外部(封闭)类的定义之外,其中外部类至少有一个内部类实例作为数据成员?我搜索了但我找到的最相关的 SO 答案,源文件中的嵌套类定义,没有一个示例,其中外部类将内部对象作为数据成员。我遵循了那个答案,就在外部类的定义中声明但未定义内部类而言,但我的代码仍然被破坏:
struct Outer
{
struct Inner;
Inner myinner;
Outer() : myinner(2) {}
};
struct Outer::Inner
{
Inner(int n) : num(n) {}
int num;
};
int main()
{
Outer myouter;
}
Run Code Online (Sandbox Code Playgroud)
它给出了error C2079: 'Outer::myinner' uses undefined struct 'Outer::Inner'VC11 中的错误。
为什么损坏的代码没有与在Inner的定义中定义的版本等效的效果Outer,就像下面的工作代码一样?
struct Outer
{
struct Inner
{
Inner(int n) : num(n) {}
int num;
} myinner;
Outer() : myinner(2) {}
};
Run Code Online (Sandbox Code Playgroud) 我试图从外部类访问内部类中的私有val,而不创建内部类的实例.
这甚至可以从中获取private inner class值the outer class吗?
提前致谢.
比方说我有:
public class A {
public A() {
...
}
...
public class B {
public B() {
...
}
public void doSomething() {
...
}
...
}
public class C {
public C() {
...
}
public void doSomething() {
...
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想创建一个可以同时包含B和C的ArrayList,我可以myArray.get(i).doSomething()在A中调用,我想要声明我的ArrayList是什么类型的?
java ×4
ambiguity ×1
android ×1
c++ ×1
extends ×1
nested ×1
nested-class ×1
oop ×1
polymorphism ×1