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
我只是在这里尝试理解主要的事情。我的主要类是Android活动类,它扩展了ListActivity,并且演示类扩展了异步。我需要从doinbackground方法读取值静态字符串s。
内部类总是可以直接访问所有变量,而无需使用任何对象或类名。因此,您可以直接参考外部类的变量而无需计算其名称。
而不是m=Main.this.s;
,您可以直接访问变量为m=s;
它的基本规则是面向对象的编程,内部类始终可以完全访问外表类的所有方法和变量。
当您想从 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";
- 首先,我不会向您展示您在此处提到的确切示例,因为您的问题不是此示例,而是要了解如何访问内类成员。
修改示例:
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;
}
}
}