多态的应用

多态的应用

1.多态的构建:

​ 自我理解:就是 父类引用指向子类对象。

功能 : 父类能调用父类对应子类的方法和属性,但是都是优先调用 重写的方法 或 子类的属性!

创建子类构造器,就是先进入子类构造器,然后默认第一行进入父类构造器:

1.这里先创建父类的对象,给父类对象赋值,或者不赋值就是默认值,把父类的属性继承给子类。

2.接着回到子类构造器,给子类构造器进行赋值,如果和父类属性重复,子类会把父类属性的值给覆盖

3.最后判断子类还有没有 没有 进入构造器的属性,如果有,就是默认值,若与父类属性重复,将会把默认值覆盖父类属性的值。

4.最后完成构造,创建子类的的对象,并且合并刚刚的父类构造,该检查过的都检查过了,该覆盖的都覆盖了,不会在有重复的属性了,接下来就是两个对象结合,形成一个新的子类对象。

并把这个对象的地址,用父类接收,也就是我们所说的,父类指向子类的对象。

注意:1.父类不能用子类独有的方法,但是经过子类重写的方法,优先调用重写的方法。

​ 2.父类接收其实是指:子类的父类形态,从父类看过去,就是父类中子类的形态,抽象一点就是和一面镜子一样!

2.多态的应用:

接下来将是多态的两种应用:

  1. 将父类作为参数进行多态!可以传递任意一个子类对象
  //喂宠物的方法
    public void feed(Animal animal){
        animal.eat();
    }
  1. 将父类作为返回值进行多态的应用!可以返回任意一个子类对象

​ 刚刚在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();
    }

}

你可能感兴趣的:(JavaSE,java)