从内类读取外部类的值


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对象。在这里,abnon-staticsstatic。因此,要获得正确的值,您必须将所有这些声明为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;
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新