java如何父类不写方法体 子类选择重写父类方法
时间: 2023-09-03 14:12:53 浏览: 51
在 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()` 方法体。
相关问题
java对象会调用父类的方法还是子类对父类重写的方法
Java中,对象调用方法的时候会优先调用子类中对父类方法的重写(Override),如果子类没有重写该方法,则会调用父类的方法。这就是Java中的方法重写机制。
例如,如果有如下的代码:
```java
public class ParentClass {
public void print() {
System.out.println("I am ParentClass");
}
}
public class ChildClass extends ParentClass {
@Override
public void print() {
System.out.println("I am ChildClass");
}
}
public class Test {
public static void main(String[] args) {
ParentClass obj = new ChildClass();
obj.print();
}
}
```
当执行 `obj.print()` 时,会输出 "I am ChildClass",因为子类 `ChildClass` 重写了 `ParentClass` 的 `print()` 方法。
需要注意的是,如果想在子类中调用父类被重写的方法,可以使用 `super` 关键字来实现,例如:
```java
public class ChildClass extends ParentClass {
@Override
public void print() {
super.print(); // 调用父类的 print() 方法
System.out.println("I am ChildClass");
}
}
```
这样,在执行 `obj.print()` 的时候,会先输出 "I am ParentClass",再输出 "I am ChildClass"。
java子类重写父类方法易错点
Java中子类重写父类方法的时候,有几个易错点需要注意:
1. 方法名、参数列表和返回类型必须与父类方法一致:子类中重写的方法必须与父类方法具有相同的方法名、参数列表和返回类型。如果不一致,会导致编译错误。
2. 访问修饰符不能更严格:子类重写的方法的访问修饰符不能比父类方法更严格。例如,如果父类方法是public,那么子类方法可以是public或者protected,但不能是private。如果违反了这个规则,编译器会报错。
3. 子类方法不能抛出比父类方法更宽泛的异常:子类重写的方法不能抛出比父类方法更宽泛的异常。也就是说,子类方法可以抛出与父类方法相同的异常或者其子类异常,或者不抛出异常,但不能抛出父类方法没有声明的异常。如果违反了这个规则,编译器会报错。
4. 子类方法不能降低访问修饰符:子类重写的方法不能降低父类方法的访问修饰符。例如,父类方法是public,那么子类方法也必须是public,而不能是protected或者default。如果违反了这个规则,编译器会报错。
5. 子类方法不能使用final修饰符:子类重写的方法不能使用final修饰符。final修饰符用于限制方法的重写,如果在子类中使用final修饰方法,编译器会报错。
总结起来,子类重写父类方法需要遵守方法签名一致、访问修饰符不能更严格、不能抛出更宽泛的异常、不能降低访问修饰符、不能使用final修饰符这几个规则。如果不遵守这些规则,编译器会报错。