Java多态

目录

Java多态

多态的具体体现

1.方法的多态

2.对象的多态

例1:


Java多态

  • 多态(多种状态)基本介绍

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

  • 多态是方法的多态,与属性无关。

  • 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,但子类没有重写父类的方法,则调用父类的方法,否则调用子类重写父类的方法。

  • 多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

  • 多态分为两种:

         1.编译时多态:是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的函数,在运行时谈不上多态。

         2.运行时多态:是动态的,由于方法重写,所以想要确定引用变量所调用的方法的入口,必须根据运行时的引用变量所指向的实例对象来确定。从而使得同一个引用变量调用同一个方法,但不同的实例对象表现出不同的行为。我们通常所说的多态指的都是运行时多态。

多态的三个必要条件

  1. 要有继承

  2. 要有方法重写

  3. 父类的引用指向子类的对象(向上转型)

多态的具体体现

1.方法的多态

  • 方法重载体现多态

2.对象的多态

老韩重要的几句话(记住):

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

          例如:Animal animal = new Dog(); (animal的编译类型是Animal,运行类型是Dog)

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

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

          例如:Animal animal = new Dog(); (animal的编译类型是Animal,运行类型是Dog)

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

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

例1:

package test.Demo03;
​
public class Animal {
    public void cry() {
        System.out.println("Animal cry() 动物在叫");
    }
}
package test.Demo03;
​
public class Dog extends Animal {
    @Override
    public void cry() {
        System.out.println("Animal cry() 小狗汪汪叫");
    }
}
package test.Demo03;

public class Cat extends Animal {
    @Override
    public void cry() {
        System.out.println("Animal cry() 小猫喵喵叫");
    }
}
package test;
import test.Demo03.Animal;
import test.Demo03.Cat;
import test.Demo03.Dog;
​
public class Application {
    public static void main(String[] args) {
​
        //父类的引用指向子类的对象
        Animal animal = new Dog(); //animal 编译类型是 Animal ,运行类型是 Dog
        animal.cry(); //执行到改行时,animal的运行类型是Dog,所以cry就是Dog的cry
​
​
        //父类的引用指向子类的对象
        animal = new Cat(); //animal 编译类型是 Animal ,运行类型是 Cat
        animal.cry();
    }
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56iL5bqP54y_6L-b5YyW54mI,size_20,color_FFFFFF,t_70,g_se,x_16

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值