Code Bye

这个 finish 函数是怎么调用到的

finish 函数是 activity 类的成员函数吧?像他这样的调用方法不成了调用 OnClickListener 类的成员函数了吗
package com.example.administrator.first;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.m1);
        Button b = (Button)findViewById(R.id.bt1);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(i);
            }
        });
    }
}
package com.example.administrator.first;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
public class SecondActivity extends Activity
{
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.m2);
        setTitle("SecondActivity");
        Button b = (Button)findViewById(R.id.bt2);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
    }
}
解决方案

20

少年,你很有天赋,看代码很仔细也知道思考。
来来来,这个问题放一边,先来看看内部类这个概念。
内部类是什么,它是一个类中再定义的一个类。
public class A {
    ......
    public class B {
    }
}

B类就是A类的内部类,A被称为外部内。在Java中,内部类不是能用普通的方式访问,内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量和方法,无论能否是private的。
看到这里就明白了,OnClickListener 其实是Activity的一个内部类,所以它可以访问外部类Activity的成员变量和方法,而且OnClickListener有点特殊,它是一个匿名内部类,也是内部类一种。
关于匿名内部类,又是另一个知识点,答主可以去查看一下。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明这个 finish 函数是怎么调用到的