我有以下代码.我想掌握使用它创建内部类对象的外部类对象inner.我该怎么做?
public class OuterClass {
public class InnerClass {
private String name = "Peakit";
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
InnerClass inner = outer.new InnerClass();
// How to get the same outer object which created the inner object back?
OuterClass anotherOuter = ?? ;
if(anotherOuter == outer) {
System.out.println("Was able to reach out to the outer object via inner !!");
} else {
System.out.println("No luck :-( ");
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:嗯,你们中的一些人建议通过添加一个方法来修改内部类: …
在以下代码段中:
public class a {
public void otherMethod(){}
public void doStuff(String str, InnerClass b){}
public void method(a){
doStuff("asd",
new InnerClass(){
public void innerMethod(){
otherMethod();
}
}
);
}
}
Run Code Online (Sandbox Code Playgroud)
是否有一个关键字来引用内部类的外部类?基本上我想要做的是outer.otherMethod(),或类似的东西,但似乎找不到任何东西.
Java程序员的简单问题 - 我不确定是否可以直接 - 请提供解决方法.
我想访问父变量来初始化嵌套的类成员,但不知道要执行它的Java语法(如果可能).如何使用父ID设置子ID.
public class Parent {
final String id = "parent";
class Child {
// it is invalid since scope hide parent id?
final String id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
我发现的最佳解决方案非常难看,请看:
public class Parent {
final String id = "parent";
// ugly clone
String shadow = id;
class Child {
final String id = shadow;
}
}
Run Code Online (Sandbox Code Playgroud)
请帮助语法 - 我不知道如何表达它.
以下伪代码很好地总结了我的问题,我认为......
class Owner {
Bar b = new Bar();
dostuff(){...}
}
class Bar {
Bar() {
//I want to call Owner.dostuff() here
}
}
Run Code Online (Sandbox Code Playgroud)
Bar b是'拥有'(什么是正确的词?)by Owner(它'有一个').那么类型的对象如何Bar调用Owner.dostuff()呢?
起初我在思考super();,但这是继承的类.然后我想通过一个界面,我是在正确的轨道上?
我的问题,抽象地说,是:
非静态内部类如何访问封闭类的实例?为了将实例用作方法调用中的参数以及访问内部类和封闭类之间具有相同名称的方法和变量,这是必需的。
像关键字一样this,super允许您访问类和父类中具有相同名称的方法和变量的特定版本,是否有关键字来访问封闭类和封闭类中的方法和变量的版本?
如果您感到困惑,请继续阅读:
考虑以下代码示例,其中包含两个类和一个内部类。Main 和 Outer 是“myPackage”包中的两个类(附带说明,由于未知原因,我无法在没有包/默认包的情况下使以下代码工作)。Inner 是一个内部的、非静态的 Outer 类。
package myPackage;
public class Outer {
public void activate() {
System.out.println("Outer.activate");
}
public class Inner {
public void go() {
activate();
}
}
}
Run Code Online (Sandbox Code Playgroud)
package myPackage;
import myPackage.Outer.Inner;
public class Main {
public static void main(String[] args) {
Outer myOuter = new Outer();
Inner myInner = myOuter.new Inner();
myInner.go();
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我构造了一个Innerwith myOuter.new Inner()。由于 Inner 是非静态的,它必须在其封闭类的现有实例之上构造:在这种情况下,myOuter. 因此,当我调用myInner.go(),myInner …
有没有办法在课外调用函数?我不知道怎么说,但我有一个例子.
class Class1{
class Class2{
public void callFunctionInC1(){
//how can I call funtionNeedtoBeCalled
}
}
public Class1(){
Class2 c2 = new Class2();
c2.callFunctionInC1();
}
public void functionNeedtoBeCalled(){
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
这听起来很奇怪,但我确实有理由这样做.反正有吗?谢谢.