练习-Java继承和多态之方法重写
时间: 2024-10-16 17:03:00 浏览: 37
在Java中,继承和多态是两个关键的概念,它们一起支持了面向对象设计的核心特性。
**继承**允许一个类(称为子类或派生类)从另一个类(称为父类或超类)获取属性和方法。通过继承,子类可以复用父类的功能,并且可以添加自己的特性和修改已有的行为。使用`extends`关键字声明继承关系,如`class ChildClass extends ParentClass`。
**方法重写**,也叫覆盖(Override),是指在子类中提供一个新的方法定义,与父类中同名的方法有相同的返回类型和参数列表。这使得子类能够有自己的实现策略,当使用父类引用调用该方法时,实际执行的是子类的方法。例如:
```java
public class ParentClass {
public void printMessage() {
System.out.println("这是ParentClass的方法");
}
}
public class ChildClass extends ParentClass {
// 方法重写
@Override
public void printMessage() {
System.out.println("这是ChildClass的方法");
}
}
```
当你创建`ChildClass`的对象并调用`printMessage()`,它会显示"这是ChildClass的方法",尽管它是通过`ParentClass`类型的引用调用的。
相关问题
第1关:练习-Java继承和多态之方法重写
第一关:Java中的继承和多态是面向对象编程的核心概念之一。方法重写(也叫覆盖)是指子类继承父类时,可以提供自己的实现版本来替代父类中同名的方法。这样做的好处有:
1. **代码复用**:子类不需要重复编写相同的逻辑,可以直接利用父类的方法。
2. **灵活性**:客户端可以根据实际实例类型调用相应的行为,无需关心具体的实现细节。
在Java中,实现方法重写需要满足以下条件:
- 子类方法的名称、返回类型、参数列表完全匹配父类的方法。
- `@Override` 注解用于显式声明该方法是对父类方法的重写。
下面是一个简单的例子:
```java
class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
// 方法重写
@Override
public void sound() {
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal(); // 父类引用,调用默认sound方法
animal.sound(); // 输出 "Animal makes a sound"
Dog dog = new Dog(); // 子类引用,调用重写后的sound方法
dog.sound(); // 输出 "Dog barks"
}
}
练习-java继承和多态之综合练习
在Java中,继承和多态是面向对象编程的核心特性,常用于创建复用性和灵活性高的代码结构。这里是一个简单的例子来展示如何通过继承和多态进行综合练习:
假设我们有一个基础类`Animal`,它有通用的行为如“吃”和“睡觉”。然后我们可以创建一些具体的动物类,比如`Dog`和`Cat`,它们分别继承自`Animal`并重写或扩展了相应的方法。
```java
// 基础类 Animal
class Animal {
void eat() {
System.out.println("这个动物正在吃");
}
void sleep() {
System.out.println("这个动物正在睡觉");
}
}
// 具体动物类 Dog 和 Cat
class Dog extends Animal {
@Override
void eat() {
System.out.println("这只狗正在享用骨头");
}
}
class Cat extends Animal {
@Override
void eat() {
System.out.println("这只猫正在吃鱼");
}
}
```
现在我们可以创建`Animal`类型的引用,并指向特定的子类实例,这就是多态:
```java
public class Main {
public static void main(String[] args) {
Animal animal = new Dog(); // 动物引用指向Dog实例
animal.eat(); // 输出 "这只狗正在享用骨头" - 多态在这里体现
animal = new Cat();
animal.eat(); // 输出 "这只猫正在吃鱼" - 指向不同子类实例,输出对应行为
}
}
```
阅读全文