栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java的多态

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java的多态

多态概述
同一个对象,在不同时刻表现出来的不同形态

举例:猫
我们可以说猫是猫:猫 cat = new 猫();
我们也可以说猫是动物:动物 animal = nwe 动物();

这里猫在不同的时刻表现出来了不同的形态,这就是多态

多态的前提和体现

  • 有继承/实现关系
  • 有方法重写
  • 有父类引用指向子类对象

创建一个animal

public class animal {
    public void eat(){
    	public int age = 40;
        System.out.println("动物吃东西");
    }
}

创建一个cat

public class cat extends animal{
    public int age = 20;
    public int weight = 10;
    @Override
    public void eat(){
        System.out.println("猫吃鱼");
    }
    public void playGame(){
        System.out.println("猫捉迷藏");
    }
}

main

public class Demo {
    public static void main(String[] args){
        //父类引用指向子类对象
        animal a = new cat();
    }
}

多态中成员访问特点
承接上述代码
访问成员变量时

public class Demo {
    public static void main(String[] args){
        //父类引用指向子类对象
        animal a = new cat();
        
        System.out.println(a.age);//不报错
        System.out.println(a.weight);//报错

		a.eat();//不报错
        a.playGame();//报错
    }
}

将weight、playGame注释掉后,运行:

40
猫吃鱼

可以看出:
在访问成员变量时,是访问左边(weight)的。
在访问成员方法时,是访问右边(cat)的。
简单说:

  • 成员变量:编译看左边,执行看左边
  • 成员方法:编译看左边,执行看右边

为什么不一样?
成员方法有重写,成员变量没有。

多态中的转型

  • 向上转型
    从子到父
    父类引用指向子类对象

  • 向下转型
    从父到子
    父类引用转为子类对象

animal a = new cat();//向上转型
a.eat();//打印:猫吃鱼
a.playGame();//报错

cat c = (cat)a;//强制转化为cat,这就是向下转型
c.eat();//打印:猫吃鱼
c.playGame();//打印:猫捉迷藏
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/310394.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号