Public class Main {
public static String s;
String a="hello";
String b="World";
s=a+b;
class Demo{
String m;
m=Main.this.s;
System.out.println(m);
}
}
输出应为:Hello World
我在这里尝试了解主要内容。 我的Main类是一个Android Activity类,它扩展了ListActivity,Demo类扩展了AsyncTask。我需要从doInBackground方法读取值静态字符串。
答案 0 :(得分:0)
当您想要从InnerClass
访问任何类型的变量值时,您可以直接调用该变量。
对于这种情况,您无需使用Main.this
来访问我们类的静态变量...只需将其调用如下...
m = s;
如果您想从另一个非内部类的类访问一个类的static
个对象,那么您需要使用类名作为...
m = Main.s;
不是......
m = Main.this.s;
所以,你的课程应该如下所示......
Public class Main{
public static String s;
String a="hello";
String b="World";
s = a + b;
class Demo{
String m;
m = s;
System.out.println(m);
}
}
<强>更新强>
结果为您提供null
,因为您正在向non-static
对象插入static
值。在此,a
和b
为non-static
,s
为static
。因此,要获得正确的值,您必须将所有值声明为static
,如下所示......
public static String s;
static String a="hello";
static String b="World";
答案 1 :(得分:0)
Inner类始终可以直接访问所有变量,而无需使用任何对象或类名。因此,您可以直接引用外部类的变量,而无需提及其名称。
而不是m=Main.this.s;
您可以直接访问变量s m=s;
它的面向对象编程的基本规则,Inner类总是完全访问outter类的所有方法和变量。
答案 2 :(得分:0)
- 首先,我不会向您展示您在此提到的确切示例,因为您的问题不是此示例,而是了解如何访问内部类成员
修改示例:
package com.cyberfreaky.test;
public class Main {
public static String static_string = "hello";
public String nonstatic_string = "world";
class Demo {
String m = "";
String n = "";
public void getStaticString() {
m = static_string;
System.out.println(m);
}
public void getNonStaticString() {
n = nonstatic_string;
System.out.println(n);
}
}
public static void main(String[] args) {
Main outerClass = new Main();
Main.Demo innerClass = outerClass.new Demo();
innerClass.getStaticString();
innerClass.getNonStaticString();
}
}
如果是Android,您可以从内部类访问外层成员,如下所示:
package com.example.simpleservice;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
public class MainActivity extends Activity {
int i = 0;
static int x = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
class InnerClass extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
int a = i;
int b = x;
return null;
}
}
}