5 java多态

1:什么是多态

  • 1:不同类的对象对同一消息作出不同的响应就叫做多态。

  • 举例子说明:

  • 小明是一个学生(也就是拥有学生形态),小明同时亦是一个员工(去兼职了,也就是拥有了员工形态)

  • 总结:

  • 小明是一个对象,这个对象既拥有学生形态,也有员工形态。一个对象拥有多种形态,这也就是:对象的多态性

2:多态的作用

  • 简单讲就是解耦。再详细点讲就是,多态是设计模式的基础,不能说所有的设计模式都使用到了多态,但是23种中的很大一部分,都是基于多态的。

3:多态使用的格式

  • 代码中体现多态性,其实就是一句话:父类引用指向子类对象

格式

  • 1:父类对象 对象名 = new 子类对象();
  • 2:接口名称 对象名 = new 实现类名称();

访问成员变量的两种方式

  • 1:直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找
  • 2:间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找

4:多态例子解释怎么使用

例子:场景假设

  • 一个主人养了猫和狗,猫和狗都有自己爱吃的东西,主人在喂它们的时候,如果既要判断是猫还是狗,再判断他们分别爱吃什么,就显得很麻烦。如果主人养了很多种动物,这样的重复判断,就会浪费很多时间。有什么办法,能让主人拿到一种食物就知道这是哪种动物的,就好了。
    1.首先,创造动物类:
// 动物类
class Animal {
    int age;
    String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // 动物类里面有叫和吃两个方法
    public void cry() {
        System.out.println("我不知道叫什么");
    }

    public void eat() {
        System.out.println("我不知道吃什么");
    }
}            

2.其次,分别创造猫类和狗类(他们继承于动物类):

// 狗类继承于动物类
class Dog extends Animal {
    // 覆盖(重写)方法
    public void cry() {
        System.out.println("旺旺");
    }

    public void eat() {
        System.out.println("我是狗,我爱吃骨头");
    }
}

// 猫类继承于动物类
class Cat extends Animal {
    // 覆盖(重写)方法
    public void cry() {
        System.out.println("喵喵");
    }

    public void eat() {
        System.out.println("我是猫,我爱吃鱼");
    }
}

3.再者,创建食物类:

// 食物类
class Food {

    String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // 食物类里面让它有一个方法
    public void showName() {

    }
}

4.再者,猫和狗都有自己不同的爱吃的食物(他们继承于食物类):

// 鱼(食物的一种)继承于食物
class Fish extends Food {
    public void showName() {
        System.out.println("食物:鱼");
    }
}

// 骨头(食物的一种)继承于食物
class Bone extends Food {
    public void showName() {
        System.out.println("食物:骨头");
    }
}

5.主人类(就可以将动物和对应的食物统一起来)

// 主人类 存在一種餵食方法
class Master {
    // 给动物喂食物,如果没有多态,他要写给猫喂食和给狗喂食两个方法
    // 有了多态,以后即使再来好多动物,用这一个函数就可以了
    public void feed(Animal an, Food f) {
        an.eat();
        f.showName();

    }
}

6.最后,方法的调用(测试)

public class DuoTaiDemo {

    public static void main(String args[]) {

        Master master = new Master();
        master.feed(new Dog(), new Bone());

        // hin方便,可以再试试
        master.feed(new Cat(), new Fish());

    }
}
7:分析
  • 1:一个动物类
  • int age
  • String name
  • 方法cry叫什么
  • 方法eat吃什么
  • 2:猫狗类
  • 猫狗类就要继承动物类,重写cry方法和eat方法
  • 就有了dog类和cat类
  • 3:食物类
  • String name
  • 方法showName
  • 4:骨头和鱼类
  • 猫和狗的食物都要继承食物类
  • 重写showName方法
  • 5:主人类
  • 主人要给动物喂食物
  • public void feed(Animal an, Food f) {
    an.eat();
    f.showName();
  • }
  • 6:测试
  • 需要new一个主人对象,然后给对象的动物喂食物
  • master.feed(new Dog(), new Bone());
  • master.feed(new Cat(), new Fish());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值