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

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呢!









