匿名内部类隐藏的super
时间: 2023-07-26 09:32:52 浏览: 63
匿名内部类可以继承一个父类或者实现一个接口,如果继承的是一个父类,那么在匿名内部类中可以使用 `super` 关键字来调用父类的方法或者构造函数,但是由于匿名内部类没有名字,所以 `super` 关键字也会被隐藏起来。如果要在匿名内部类中调用父类的方法或者构造函数,可以使用 `super` 关键字加上括号来实现。例如:
```java
父类对象.父类方法(参数);
super(参数);
```
相关问题
匿名内部类有隐藏的super吗
是的,和普通的内部类一样,匿名内部类也有隐藏的 `super`。当匿名内部类继承自一个父类时,可以使用 `super` 关键字来调用父类的构造方法或者实例方法。当匿名内部类实现一个接口时,可以使用 `super` 关键字来调用接口的默认方法。但是由于匿名内部类没有名字,因此 `super` 关键字也会被隐藏起来,需要使用以下格式来调用:
- 调用父类构造方法:`super(参数列表);`
- 调用父类实例方法:`super.父类方法名(参数列表);`
- 调用接口默认方法:`接口名.super.默认方法名(参数列表);`
需要注意的是,匿名内部类只能访问其外部类中的 `final` 局部变量和外部类的成员变量,因为这些变量在编译时被复制到了匿名内部类中。如果要访问其他局部变量,需要将其声明为 `final`。
举一个匿名内部类中持有外部类的引用
下面是一个匿名内部类中持有外部类的引用的例子:
```
public class MainActivity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 在这里持有MainActivity的引用
Toast.makeText(MainActivity.this, "Button clicked", Toast.LENGTH_SHORT).show();
}
});
}
}
```
在这个例子中,OnClickListener是一个匿名内部类,它被设置为Button的点击事件监听器。在这个匿名内部类中,我们使用了MainActivity.this来获取外部类MainActivity的引用。这个引用会被保存在OnClickListener对象中,如果OnClickListener对象被长时间持有,就会导致MainActivity无法被垃圾回收,从而导致内存泄漏。
要避免这种情况,应该尽量避免在匿名内部类中持有外部类的引用。可以将外部类的引用传递给匿名内部类的构造函数中,或者使用弱引用等不会导致内存泄漏的引用类型。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)