企业商业贿赂指控的舆情管理
2026/6/3 16:36:33
定义一个父类Animal,包含私有属性name、构造方法和普通方法eat();再定义两个子类Dog和Cat,继承自Animal并分别重写eat()方法;最后编写测试类,使用父类引用指向子类对象的方式调用eat()方法,验证多态的执行效果。
要求:
Animal的eat()方法输出:"动物在吃东西"Dog的eat()方法输出:"小狗 [名字] 在啃骨头"Cat的eat()方法输出:"小猫 [名字] 在吃鱼"Animal类型引用接收并调用eat()name和行为eat(),封装到父类Animal中,通过构造方法初始化属性。Dog和Cat通过extends关键字继承Animal,复用父类的name属性,同时重写父类的eat()方法,实现各自特有的行为。Animal的引用指向子类对象(Animal a = new Dog();),调用方法时会自动执行子类重写后的版本。java
运行
// 1. 定义父类Animal public class Animal { // 私有属性:封装,只能通过父类方法访问 private String name; // 父类构造方法:初始化name属性 public Animal(String name) { this.name = name; // this指代当前对象,给当前对象的name赋值 } // 父类普通方法:所有动物共有的行为 public void eat() { System.out.println("动物在吃东西"); } // 提供getter方法,让子类可以获取name属性 public String getName() { return name; } } // 2. 定义子类Dog,继承Animal class Dog extends Animal { // 子类构造方法:必须通过super调用父类构造方法 public Dog(String name) { super(name); // super指代父类对象,调用父类的构造方法初始化name } // 重写父类的eat()方法:@Override注解标记重写 @Override public void eat() { // 调用父类的getName()获取名字,实现子类特有行为 System.out.println("小狗" + getName() + "在啃骨头"); } } // 3. 定义子类Cat,继承Animal class Cat extends Animal { public Cat(String name) { super(name); } @Override public void eat() { System.out.println("小猫" + getName() + "在吃鱼"); } } // 4. 测试类,验证多态 class TestPolymorphism { public static void main(String[] args) { // 父类引用指向父类对象:执行父类的eat() Animal animal = new Animal("通用动物"); // 父类引用指向Dog子类对象:向上转型,执行Dog的eat() Animal dog = new Dog("旺财"); // 父类引用指向Cat子类对象:向上转型,执行Cat的eat() Animal cat = new Cat("咪咪"); // 统一调用eat()方法,实际执行不同子类的逻辑 animal.eat(); dog.eat(); cat.eat(); } }plaintext
动物在吃东西 小狗旺财在啃骨头 小猫咪咪在吃鱼多态的三个必要前提
多态的核心优势
Pig)时,无需修改测试类代码,直接继承并重写方法即可常见误区