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