关于方法覆盖,以下说法正确的是:【 】 A. 子类方法的参数及返回类型不需要与父类完全相同 B. 子类方法不能缩小父类方法的访问权限 C. 子类可以用非静态方法覆盖父类的静态方法 D. 父类的private方法可以被子类覆盖
时间: 2024-04-02 13:31:23 浏览: 7
说法正确的是B选项,即子类方法不能缩小父类方法的访问权限。其他选项都是错误的。方法覆盖要求子类方法的方法名、参数列表必须与父类方法完全相同,返回值类型可以是父类方法返回值类型的子类型;子类方法的访问修饰符不能低于父类方法的访问修饰符;静态方法不能被非静态方法覆盖,也不能用非静态方法覆盖;父类的private方法不能被子类覆盖。
相关问题
重写的返回类型于被重写的返回类型可以不相同,但是必须是父类返回值的派生类。此说法正确吗
这个说法基本上是正确的,但需要做出一些说明。在重写方法时,子类方法的返回类型必须与父类方法的返回类型相同或者是其子类,这是为了保证子类方法可以完全替代父类方法。如果子类方法的返回类型比父类方法更加宽泛,就有可能导致使用子类方法的地方无法正常工作。例如,以下是一个重写的例子:
```java
public class Animal {
public Object eat() {
System.out.println("Animal is eating.");
return null;
}
}
public class Dog extends Animal {
@Override
public String eat() {
System.out.println("Dog is eating.");
return "";
}
}
```
在上面的代码中,`Dog` 类重写了 `Animal` 类的 `eat()` 方法,并将返回类型从 `Object` 改为了 `String`。然而,这是不合法的重写,因为 `String` 类型不是 `Object` 类型的子类,这就违反了上述规则。如果我们使用 `Dog` 对象调用 `eat()` 方法,就会出现编译错误。
因此,虽然重写方法的返回类型可以是父类返回值的派生类,但是必须要满足子类方法返回类型是父类方法返回类型的子类型,否则会导致编译错误。
java如何父类不写方法体 子类选择重写父类方法
在 Java 中,如果父类中的方法没有被实现,那么子类就可以选择是否重写该方法。如果子类选择重写该方法,可以按照以下步骤进行:
1. 在子类中使用 `@Override` 注解来明确表示该方法是对父类中的方法进行重写。
2. 子类中的方法名、参数列表和返回类型必须与父类中的方法完全相同。
3. 在子类中编写方法体,实现对父类中方法的重写。
以下是一个简单的示例代码:
```java
class Animal {
public void speak() {
System.out.println("动物发出叫声");
}
}
class Dog extends Animal {
@Override
public void speak() {
System.out.println("汪汪汪");
}
}
```
在上面的示例中,父类 `Animal` 中的 `speak()` 方法并没有实现,而子类 `Dog` 选择重写了该方法,并实现了自己的 `speak()` 方法体。