把每个坑给我一个例子
时间: 2024-09-06 10:08:24 浏览: 34
Android中使用背景色Alpha值遇到的一个坑
当然可以,以下是关于`super()`函数的一些例子,分别对应上面提到的几个坑:
1. **遗漏调用**:
```java
class Parent {
Parent(int a) { System.out.println("Parent constructor"); }
}
class Child extends Parent {
// 错误:遗漏了对父类构造函数的调用
public Child(String b) { System.out.println("Child constructor"); }
}
```
运行这段代码时,`Child`类没有初始化`Parent`的构造,可能导致运行时错误。
2. **时机不当**:
```java
class A {
void method() { super.someMethod(); } // 错误:不能在静态方法中使用super
}
```
上述代码试图在静态方法中调用父类方法,会导致编译错误。
3. **隐式this与super**:
```java
class B {
B(int x) { this(1); super(); } // 正确:自动调用了父类构造
}
```
如果这里省略了`super()`,则`super()`会被隐式调用。
4. **重写方法的情况**:
```java
class C extends D {
@Override
void method() { super.method(); } // 调用的是父类被覆盖后的method
}
```
如果`D`的`method()`被重写了,`super.method()`将执行新的版本。
5. **混淆作用域**:
```java
class E extends Parent {
class Inner {
// 这里需要显式指定super,否则可能调用外层的Parent
void callSuper() { super(Parent::constructor); }
}
}
```
在实际编程中,理解并正确处理这些情况非常重要。如果你有任何关于这些示例的问题,随时提问哦。
阅读全文