面向对象编程——多态

提示:本文为学习java基础篇的笔记 详解视频见于B站【零基础 快速学Java】韩顺平 零基础30天学会Java

文章目录


前言

  计算机程序运行时,相同的消息可能会送给多个不同的类别之对象,而系统可依据对象所属类别,引发对应类别的方法,而有不同的行为。简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作。


提示:以下是本篇文章正文内容,下面案例可供参考(案例来自B站【零基础 快速学Java】韩顺平 零基础30天学会Java

一、多态是什么?

  方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础之上的。

二、多态的具体体现

1.方法的多态(重写和重载体现多态)

代码如下(示例):    


public class PloyMethod {   //面向对象多态—方法的多态(重载和重写)
    public static void main(String[] args) {
        //方法重载体现多态
        A a = new A();
        //传入不同的参数,就会调用不同的sum方法,体现方法的多态
        System.out.println(a.sum(10, 20));
        System.out.println(a.sum(10, 20, 30));

        //方法重写体现多态
        B b = new B();
        a.say();
        b.say();
    }
}

class B {  //父类
    public void say() {
        System.out.println("B的 say()方法被调用了");
    }

}

class A extends B { //子类

    public int sum(int n1, int n2) { //和下面的sum方法构成重载
        return n1 + n2;
    }

    public int sum(int n1, int n2, int n3) {
        return n1 + n2 + n3;
    }


    public void say() {
        System.out.println("A的say方法被调用了");
    }
}

 运行结果:

30
60
A的say方法被调用了
B的 say()方法被调用了

具体教学详解视频:韩顺平老师面向对象-方法的多态(重写和重载的体现)

2.对象的多态

(1)一个对象的编译类型和运行类型可以不一致

(2)编译类型在定义对象时,就确定了,不能改变。

(3)运行类型是可以变化的。

(4)编译类型看定义时 = 号左边,运行类型看 = 号的右边。

例如:

Animal animal = new Dog();

[animal编译类型是Animal,运行类型是Dog]

代码如下(示例):

Animal.class:

public class  Animal { //父类
    public void cry()
    {
        System.out.println("动物在叫唤......");
    }
}

Cat.class

public class Cat extends Animal { //子类


    public void cry()
    {
        System.out.println("Cat  小猫喵喵叫");
    }
}

Dog.class

public class Dog extends Animal { //子类

    public void cry() {
        System.out.println("Dog 小狗汪汪叫");
    }
}

PolyObject.class

public class PolyObject {

    public static void main(String[] args) {

        //体现对象多态特点

        Animal animal = new Dog();//运行类型是Dog 执行的方法就是Dog cry()

        animal.cry();//小狗汪汪叫 执行方法时注意该对象的运行类型Dog

        animal = new Cat();//编译类型Animal,运行类型是Cat 执行的方法就是Cat cry()

        animal.cry();//小猫喵喵叫 执行方法时注意该对象的运行类型Cat

    }
}

执行结果为该对象的运行类型中的方法

运行结果:

Dog 小狗汪汪叫
Cat  小猫喵喵叫

 具体教学详解视频:韩顺平老师面向对象-对象的多态

3.多态的入门案例

Animal父类以及它的子类们

public class Animal {//父类
    private String name;

    public Animal(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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


public class Dog extends Animal { //子类
    public Dog(String name) {
        super(name);
    }
}

public class Cat extends Animal { //子类
    public Cat(String name) {
        super(name);
    }
}


public class Pig extends Animal{ //子类
    public Pig(String name)
    {
        super(name);
    }
}

Food父类以及它的子类们 

public class Food {
    private String name;

    public Food(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

public class Bone extends Food {
    public Bone(String name) {
        super(name);
    }
}

public class Fish extends Food {
    public Fish(String name) {
        super(name);
    }
}

public class Rice extends Food {
    public Rice(String name) {
        super(name);
    }
}

Master.class

public class Master {
    private String name;

    public Master(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    //使用多态机制,可以统一的管理主人喂食的问题
    public void feed(Animal animal, Food food) {
        System.out.println("主人" + name + "给" + animal.getName() + "吃" + food.getName());
    }

}

 poly01.class:

public class poly01 {
    public static void main(String[] args) {
        Master tom = new Master("汤姆");
        Dog dog = new Dog("大黄");
        Bone bone = new Bone("骨头");
        System.out.println("-----------");
        tom.feed(dog, bone);

        Cat cat = new Cat("小花猫");
        Fish fish = new Fish("黄花鱼");
        System.out.println("-----------");
        tom.feed(cat, fish);

        Pig pig = new Pig("小花猪");
        Rice rice = new Rice("米饭");
        System.out.println("-----------");
        tom.feed(pig, fish);
    }
}

运行结果:

-----------
主人汤姆给大黄吃骨头
-----------
主人汤姆给小花猫吃黄花鱼
-----------
主人汤姆给小花猪吃黄花鱼

  具体教学详解视频:韩顺平老师面向对象-多态的快速入门案例


总结


       以上就是今天要讲的内容,本文介绍了方法和对象多态的具体体现以及相关使用案例。具体代码实现以及使用,在了解原理的基础上需要勤加练习即可掌握。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淘尽红尘几多娇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值