面向对象——多态

举报
荞慧子 发表于 2022/12/31 23:46:40 2022/12/31
【摘要】 基本介绍        方法或者对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础上的。方法的多态public class PolymorphicMethod { public static void main(String[] args) { //方法重载体现多态 B b = new B(); //这里传入不同的参数,就会调...

基本介绍

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

方法的多态

public class PolymorphicMethod {
    public static void main(String[] args) {
        //方法重载体现多态
        B b = new B();
        //这里传入不同的参数,就会调用不同的方法
        System.out.println(b.sum(10, 20));
        System.out.println(b.sum(10, 20, 30));

        System.out.println("===========");
        //方法重写体现多态
        A a = new A();
        a.say();
        b.say();
    }
}

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

class B extends A {
    public void say() {
        System.out.println("B类的say()方法被调用。。。");
    }

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

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

输出结果:

 对象的多态

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

例如:Animal animal = new Dog(); 可以让一个对象父类的引用指向子类的一个对象(animal的编译类型是Animal,运行类型是Dog)

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

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

即:animal = new Cat();(animal的运行类型变成了Cat,编译类型仍然是Animal)

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

基本案例演示

public class PolymorphicObject {
    public static void main(String[] args) {

        Animal animal = new Dog();//animal 的编译类型是Animal,运行类型是Dog
        animal.cry();//小狗汪汪叫
        //执行到animal.cry();时,animal的运行类型是Dog,所以cry就是Dog类的方法

        animal = new Cat();//animal 的编译类型还是Animal。运行类型变为了Cat
        animal.cry();//小猫喵喵叫
    }
}

class Animal {
    public void cry() {
        System.out.println("动物在叫。。。");
    }
}

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

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。