多态的应用
1.多态的构建:
自我理解:就是 父类引用指向子类对象。
功能 : 父类能调用父类对应子类的方法和属性,但是都是优先调用 重写的方法 或 子类的属性!
创建子类构造器,就是先进入子类构造器,然后默认第一行进入父类构造器:
1.这里先创建父类的对象,给父类对象赋值,或者不赋值就是默认值,把父类的属性继承给子类。
2.接着回到子类构造器,给子类构造器进行赋值,如果和父类属性重复,子类会把父类属性的值给覆盖
3.最后判断子类还有没有 没有 进入构造器的属性,如果有,就是默认值,若与父类属性重复,将会把默认值覆盖父类属性的值。
4.最后完成构造,创建子类的的对象,并且合并刚刚的父类构造,该检查过的都检查过了,该覆盖的都覆盖了,不会在有重复的属性了,接下来就是两个对象结合,形成一个新的子类对象。
并把这个对象的地址,用父类接收,也就是我们所说的,父类指向子类的对象。
注意:1.父类不能用子类独有的方法,但是经过子类重写的方法,优先调用重写的方法。
2.父类接收其实是指:子类的父类形态,从父类看过去,就是父类中子类的形态,抽象一点就是和一面镜子一样!
2.多态的应用:
接下来将是多态的两种应用:
- 将父类作为参数进行多态!可以传递任意一个子类对象
//喂宠物的方法
public void feed(Animal animal){
animal.eat();
}
- 将父类作为返回值进行多态的应用!可以返回任意一个子类对象
刚刚在Animal父类下创建了eat();方法
并在四种动物,也就是Animal的子类下,重写了四种不同的eat();方法
在测试类里,用多态实现,对各种子类的调用
//获得宠物的方法
public Animal getAnimal(String type){
Animal animal=null;
switch (type){
case "dog":
animal=new Dog();
break;
case "bird":
animal=new Bird();
break;
case "fish":
animal=new Fish();
break;
case "snake":
animal=new Snake();
break;
}
return animal;
}
最后测试类去实现
package com.qf.extendsTest;
import java.util.Scanner;
public class DuoTai1 {
public static void main(String[] args) {
//要调用该类的方法,必须创建该类的对象
DuoTai1 duoTai1 = new DuoTai1();
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你要收养的宠物类型:");
String type = scanner.next();
//获取子类,把父类引用指向子类的对象
Animal animal = duoTai1.getAnimal(type);
duoTai1.feed(animal);
}
//获得宠物的方法
public Animal getAnimal(String type){
Animal animal=null;
switch (type){
case "dog":
animal=new Dog();
break;
case "bird":
animal=new Bird();
break;
case "fish":
animal=new Fish();
break;
case "snake":
animal=new Snake();
break;
}
return animal;
}
//喂宠物的方法
public void feed(Animal animal){
animal.eat();
}
}
文章详细阐述了Java中多态的概念,包括父类引用指向子类对象的机制,以及多态在构造器中的工作原理。通过创建子类并覆盖父类属性和方法,展示了如何通过父类引用调用子类的重写方法。文章还介绍了多态在函数参数和返回值中的应用,例如`feed`方法接受Animal类型的参数,可以根据传入的子类对象执行不同的行为。最后,通过一个测试类示例展示了如何实际运用这些概念。
293

被折叠的 条评论
为什么被折叠?



