💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 1、多态 多态是同一个行为具有多个不同表现形式或形态的能力。 ### 多态存在的三个必要条件 * 继承 * 重写 * 父类引用指向子类对象 ### 1.1 代码实现 ``` public class Animal { public void eat() { System.out.println("动物都有吃东西的能力"); } } public class Cat extends Animal { public void run () { System.out.println("小猫快乐的奔跑"); } @Override public void eat() { System.out.println("小猫吃鱼~~~"); } } public class Dog extends Animal { public void sleep() { System.out.println("小狗睡觉~~~"); } @Override public void eat() { System.out.println("小狗吃骨头~~~"); } } ``` ### 1.2 向上转型 向上转型即父类引用指向子类实例。 ``` public class Test { public static void main(String[] args) { Animal a1 = new Animal(); // 向上转型、隐式转型、自动转型 Animal a2 = new Cat(); Animal a3 = new Dog(); a1.eat(); // 动物都有吃东西的能力 a2.eat(); // 小猫吃鱼~~ a3.eat(); // 小狗吃骨头~~~ } } ``` 【选择】创建一个父类`Animal`,一个子类`Cat`,`Animal three = new Cat();`不是()(选择一项) ``` A 向上转型 B 自动转型 C 向下转型 D 隐式转型 ``` 【选择】下列代码怎么修改可以使其成功运行()(选择一项) ``` public class Animal { public void eat() { System.out.println("动物吃~~~"); } } public class Bird extends Animal { public void eat() { System.out.println("鸟吃虫子~~~"); } public void fly() { System.out.println("鸟儿正在飞"); } } public class Test { public static void main(String[] args) { Animal one = new Bird(); // 1 one.eat(); // 2 one.fly(); // 3 } } ``` ``` A 删除掉标注3位置的 one.fly(); B 标注1的 Animal one = new Bird(); 修改为 Animal one = new Animal(); C 删除掉标注2位置的 one.eat(); D 标注1的 Animal one = new Bird(); 修改为 Bird one = new Animal(); ``` ### 1.3 向下转型 向下转型(强制类型转换)即子类引用指向父类实例,需要强制类型转换。 ``` Cat temp = (Cat) animal; ``` 【选择】阅读以下代码,横线处填写()无法在控制台输出“无忧无虑“(选择两项) ``` class Animal { public void set() { System.out.println("香甜可口"); } } class Fish extends Animal { public void swim() { System.out.println("自由自在"); } } class Roo extends Animal { public void leap() { System.out.println("无忧无虑"); } } public class Test { public static void main(String[] args) { _______________________ } } ``` ``` A Roo one = new Roo(); one.leap(); B Animal one = new Roo(); ((Roo) one).leap(); C Roo one = new Animal(); one.leap(); D Animal one = new Animal(); Roo roo = new (Roo) one; one.leap(); ``` ### 1.4 `instanceof`运算符 ``` // 用于判断 obj 是否是 Classname 的实例或者是派生类实例 boolean flag = obj instanceof Classname; ``` 【选择】阅读下列 Java 代码,横线处应该填写()能在控制台正确输出“汪汪汪“(选择一项) ``` class Animal {} class Dog extends Animal { public void shout() { System.out.println("汪汪汪"); } } class Roo extends Animal { public void leap() { System.out.println("无忧无虑"); } } class Manager { public void play(Animal animal) { (1) } } public class Test { public static void main(String[] args) { (2) new Manager().play(animal); } } ``` ``` A (1) (Dog) animal.shout(); (2) Animal animal = new Dog(); B (1) if(animal instanceof Dog) { ((Dog) animal).shout(); } else { ((Roo) animal).leap(); } (2) Animal animal = new Animal(); C (1) if(animal instanceof Dog) { ((Dog) animal).shout(); } else { ((Roo) animal).leap(); } (2) Animal animal = new Dog(); D (1) if(animal instanceof Dog) { ((Dog) animal).shout(); } else { ((Roo) animal).leap(); } (2) Animal aniaml = new Roo(); ``` 【选择】下列关于 instanceof 说法不正确的是()(选择一项) ``` A instanceof 的返回值为 true 和 false B instanceof 可以用来判断对象是否可满足某个特定类型 C 可以通过"A instanceof B"表示 A 类可以转型为B类 D instanceof 可放在if语句的条件表达式中 ``` 【选择】已知父类 Person,子类 Man。判断 Person 的对象person是否满足类 Man 的实例特征,正确的语句为()(选择一项) ``` Person person = new Man(); Man man = new Man(); ``` ``` A if (person instanceof Man) B if (man instanceof Person) C if (Person instanceof man) D if (Man instanceof person) ``` 【选择】在 Java 中,多态的实现不仅能减少编码的工作量,还能大大提高程序的可维护性及扩展性,那么实现多态的步骤包括以下几个方面除了()(选择一项) ``` A 子类重写父类的方法 B 子类方法设置为final类型 C 定义方法时,把父类类型作为参数类型;调用方法时,把父类或子类的对象错位参数传入方法 D 运行时,根据实际创建的对象类型动态决定使用哪个方法 ``` 【编程】应用继承和多态的思想,编写动物类,成员方法是动物叫声。写三个具体的类(猫,狗,羊),它们都是动物类的子类,并重写父类的成员方法。编写测试类,随机产生三种具体动物,调用叫声这个方法。程序参考运行效果图如下: ``` 小羊的叫声:咩咩咩~~~ 小狗的叫声:汪汪汪~~~ 小羊的叫声:咩咩咩~~~ 小狗的叫声:汪汪汪~~~ 小羊的叫声:咩咩咩~~~ ``` ``` public class Test { public static void main(String[] args) { // 生成父类对象数组,数组长度为 5 // 产生随机数,随机产生三种具体子类的实例 // 循环输出,循环体中每个对象分别调用 cry() 方法 } } public class Animal { // 属性:kind(种类) public Animal() {} // 创建带参(kind 为参数)构造函数 // 应用封装实现对私有属性的get/set操作 // 创建成员方法cry():void } public class Cat extends Animal { // 重写父类 cry } public class Dog extends Animal { // 重写父类 cry } public class Sheep extends Animal { // 重写父类 cry } ```