0
点赞
收藏
分享

微信扫一扫

Java三大特性之一 --- 多态

一叶轻舟okok 2022-04-26 阅读 62
java

简介:这里本作者是为了记录并且复习所学习的内容,所以在这里记录自己的学习过程,如果有雷同,全属巧合。如果有出现错误的地方,欢迎阅读的小伙伴留言,我会及时改正,方便也后的小伙伴阅读。

1.多态的概念:

同一行为,在不同行为场景之下的不同行为行为形式,称之为多态。

 

2.example:

这里有三只小宠物,分别为三个对象,他们均需要主人喂养他们食物。

--- 这里的三只宠物都有 “吃” 这个行为---

---而且他们是不同的动物吃的东西不同,这就是不同场景---

2-1.pet类

public abstract class  pet {
    public abstract void eat();
}

2-2.Dog类

public class Dog  extends pet{
    @Override  //意思是重写的修饰符
    public void eat() {
        System.out.println("我是Dog爱吃骨头");
    }
}

2-3.Cat类

public class Cat extends pet {
    @Override
    public void eat() {
        System.out.println("我是cat爱吃鱼");
    }
}

2-4.Sheep类

public class Sheep extends pet {
    @Override
    public void eat() {
        System.out.println("我是Sheep爱吃草");
    }
}

2-5.master类

public class Master {

    public void feed(Dog dog){
        dog.eat();
    }public void feed(Cat cat){
        cat.eat();
    }public void feed(Sheep sheep){
        sheep.eat();
    }
}

注:三个方法都是feed方法,这种方式我们称之为覆写,所谓覆写就是方法名都相同,参数列表当中的参数不同(包括顺序不同)。

2-6.测试类

public class TestTest {
    public static void main(String[] args) {
        Master master = new Master();
        //狗的喂养方式
        Dog dog = new Dog();
        master.feed(dog);

    }
}

3.从上面的代码当中我们不难看出来,如果我们需要每多一个宠物的话,就需要在master类当中修改一次,那么这样的工作量就大大地增加了,而且代码就更加地复杂了,所以我们就就引出了多态的概念,让我们的master类不会那么繁琐,那么麻烦,代码那么复杂。我们只用修改master当中的代码即可。

修改如下:

前:
public class Master {

    public void feed(Dog dog){
        dog.eat();
    }public void feed(Cat cat){
        cat.eat();
    }public void feed(Sheep sheep){
        sheep.eat();
    }
}

后:
public void feed(pet pet1){
    pet1.eat();
}

我们发现在pet类是抽象类,是不能够实例化的,但是我们这里用的是pet的对象,这就是我们多态的含义和定义。

现在我们发现如果我们每增加一个宠物的话,就不用对我们的master类当中的代码进行修改,这是不是就是更加的方便和灵活。这就是我们Java中的特性之一,也是我们Java相比于其他的语言更加的优势。

课堂福袋小福利:

这里为大家介绍一下返回值是对象的方法,这里我就用上面的例子为大家介绍。

1.Master类
public class Master {

    public void feed(pet pet1){
        pet1.eat();
    }
    public pet getpet(){
        int num = (int)Math.random();
        pet pet1 = null;
        switch (num) {
            case 1:
                pet1 = new Dog();
                break;
            case 2:
                pet1 = new Cat();
                break;
            case 3:
                pet1 = new Sheep();
            default://这里默认只是Dog
                pet1 = new Dog();

        }
        return pet1;
    }
}

2.测试类

public class TestTest {
    public static void main(String[] args) {
        Master master = new Master();
        //狗的喂养方式
        Dog dog = new Dog();
        master.feed(dog);

        pet pet1 = master.getpet();
        master.feed(pet1);

    }
}

注:这里我们可以用随机数的功能实现用抽签的方式对宠物进行喂养,是不是感觉很nice呢!

举报

相关推荐

0 条评论