Java可以写成super.super嘛
时间: 2024-08-17 19:01:52 浏览: 39
在Java中,`super.super`这样的语法实际上不是直接允许的。当你在一个子类的方法或构造函数中使用`super`关键字,它的作用是指向父类的上一级父类,而不是无限递归到更早的祖先。例如:
```java
class Grandparent {
// 父类方法
}
class Parent extends Grandparent {
public void parentMethod() {
super.parentMethod(); // 调用Grandparent的parentMethod
}
}
class Child extends Parent {
public void childMethod() {
super.super.parentMethod(); // 这里实际会调用Parent的parentMethod,因为Parent已经是Grandparent的子类了
}
}
```
在这种情况下,`super.super`通常不会被用于常规的程序设计,除非有特殊的设计需要访问双重继承结构的共同祖先方法。但通常,我们只会看到`super`关键字用于向上引用最近的父类。
相关问题
private DrivingActivity mActivity; @Override public void onAttach(Context context) { super.onAttach(context); mActivity = (DrivingActivity) context; } 这样写可以吗?会不会造成空指针?
这种写法是可以的,但需要注意的是,如果你的 Fragment 被添加到了一个不是 `DrivingActivity` 类型的 Activity 中,那么在调用 `mActivity` 的方法时会抛出 `ClassCastException` 异常,因为无法将 `Context` 强制转换成 `DrivingActivity` 类型。
为了避免这种情况,你可以在 `onAttach()` 方法中进行类型判断,例如:
```java
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof DrivingActivity) {
mActivity = (DrivingActivity) context;
} else {
throw new IllegalStateException("Fragment can only be attached to DrivingActivity");
}
}
```
在这种写法中,如果 `context` 不是 `DrivingActivity` 类型,那么就会抛出 `IllegalStateException` 异常,从而避免了空指针异常的发生。
阅读全文