2
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 クラスは、ListActivity を拡張する Android Activity クラスであり、Demo クラスは AsyncTask を拡張します。doInBackground メソッドから値 Static String を読み取る必要があります。

4

3 に答える 3

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 の場合、以下のように Inner Class から Outer Class メンバーにアクセスできます。

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;
        }

    }

}
于 2014-03-06T07:19:44.190 に答える
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-staticstaticabnon-staticsstaticstatic

    public static String s;
    static String a="hello";
    static String b="World";
于 2014-03-06T06:36:27.337 に答える
0

内部クラスは、オブジェクトまたはクラス名を使用せずに、常にすべての変数に直接アクセスできます。したがって、その名前を言及せずに、外部クラスの変数を直接参照できます。

の代わりにm=Main.this.s;変数 s に直接アクセスできますm=s;

オブジェクト指向プログラミングの基本的なルールは、内部クラスが常に外部クラスのすべてのメソッドと変数に完全にアクセスできることです。

于 2014-03-06T06:36:35.783 に答える