首页 > 其他分享 >Day22:多态详解

Day22:多态详解

时间:2022-11-26 00:12:05浏览次数:52  
标签:eat 多态 Day22 详解 println 父类 public out

方法的多态

1.1什么是多态?

指一个对象在不同时刻拥有不同的形态。

例:猫 cat=new 猫();

​ 动物 animal=new 猫();

多态建立的条件:

  1. 建立在继承的关系上;
  2. 有方法重写;
  3. 有父类的引用指向子类对象(父类引用指向即 动物 animal)

我们通过代码进一步了解多态:

将多态建立的条件加入代码之中

//建立一个父类
public class Animals{
    //创建父类方法
    public void eat(){
        System.out.println("动物在吃东西");
    }
}
//建立一个子类
public class Cat extends Animals{//建立继承关系
     //方法重写
    public void eat(){  
    System.out.println("猫在吃鱼");
    }
}
//建立一个测试类
public class Aplication{
    public static void main(String[] args){
        //建立父类的引用指向子类对象
        Animals a=new Cat();
    }
}

以上根据多态的三个前提条件我们建立了多态。

1.2多态中的成员访问特点

多态中的成员访问特点:

成员属性:编译和运行都看左边;

成员方法:编译看左边,运行看右边。

我们通过以下代码对特点进一步的了解:

//建立一个父类
public class Animals{
    int age=40;
    public void eat(){
        System.out.println("动物在吃东西");
    }
    public void play(){
    Sysem,out,println("动物在玩游戏");
    }
}
//建立一个子类
public class Cat extends Animals{//建立继承关系
    String name="花儿";
    int age=5;
    public void eat(){  
    System.out.println("猫在吃鱼");
    }
    public void shout(){  
    System.out.println("猫在叫");
    }
    
}
//建立一个测试类
public class Aplication{
    public static void main(String[] args){
        Animals a=new Cat();
        
        //分别调用成员并输出
        Sytem.out.println(a.age);
        Sytem.out.println(a.name);
        Sytem.out.println(a.eat);
        Sytem.out.println(a.play);
        Sytem.out.println(a.shout);
    }
}
//输出结果
40
ClassCastException
猫在吃鱼
动物在玩游戏
ClassCastException

我们来对结果进行分析:

父类中的成员属性有age;子类的成员属性有name、age

我们建立的对象引用是父类的;但对象的实际本质是子类对象

这也就将对象实例化分为了左右,而外界看到的则是左侧的引用类型

所以当我们调用属性、方法时,最开始编译就从左边开始,然后运行右边

引用类型为父类,其成员含有age、eat、play;当我们调用age、eat、play时,我们是能够成功调用的;而调用name(非父类成员)时发现报错

由此我们可以得出第一个结论:

多态现象中,我们可以调用什么成员是由左边的引用类型决定的!

我们从结果发现a.age的结果是父类的属性

由此我们得到第二个结论:

多态现象中,属性的编译和运行都是由左边的引用类型决定的!

我们从输出结果发现我们调用eat方法时,输出的结果却是子类eat方法(重写)的结果;而调用play(未重写)方法时,输出的是父类的play方法;而调用shout方法则无法调用

由此我们可以得出第三个结论:

多态现象中,方法的编译是看左边,运行是看右边!


总结以上结论:

成员属性:编译和运行都看左边;

成员方法:编译看左边,运行看右边。

标签:eat,多态,Day22,详解,println,父类,public,out
From: https://www.cnblogs.com/CQliuwei/p/16926728.html

相关文章

  • 函数式接口的案例详解
    ​ 1.无参无返回值方法的函数式接口1.1自定义类实现接口的方式 1.2匿名内部类的方式 1.3lambda表达式的方式​ 2.有参无返回值方法的函数式接口......
  • petshop4.0 详解之二(数据访问层之数据库访问设计)
    在系列一中,我从整体上分析了PetShop的架构设计,并提及了分层的概念。从本部分开始,我将依次对各层进行代码级的分析,以求获得更加细致而深入的理解。在Pe......
  • 再次详解clientHeight、offsetHeight、scrollHeight
    关于clientHeight、offsetHeight、scrollHeightwindow.screen.availWidth返回当前屏幕宽度(空白空间)window.screen.availHeight返回当前屏幕高度(空白空间)window.s......
  • petshop4.0 详解之一(系统架构设计)(转载)
    前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力。业界有许多.Net与J2EE之争,许多数据是从微软的PetShop和Sun的PetStore而来。这种争论不......
  • 详解支持向量机-硬间隔与软间隔:重要参数C【菜菜的sklearn课堂笔记】
    视频作者:菜菜TsaiTsai链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili我们之前在理论推导中使用的数据都有一个特点,那就是他们或是完全......
  • 深和jsonp【转】 jsonpk跨域问题详解
    取不到数据!上周客户新买了服务器,原本在旧的服务器上放着客户的Web主页信息和一个后台程序(asp.net),在客户的主页中有一个动态显示最新消息的处理,这个处理就是通过ajax异......
  • Jenkinsfile 详解
    PipelinePipeline是Jenkins中最为灵活的job构建方式,可实现像流水线一样调度Jenkins任务,通过Jenkinsfile描述整个持续集成流程。Pipeline支持使用声明式语法编......
  • 10-多态中调用成员的特点
    多态调用成员的特点解释理解多态调用成员的内存图......
  • jenkins pipline 基本语法详解(第四周)
    pipline简介pipline运行在jenkins2.X版本的核心插件,Pipline就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成......
  • JavaScript中String的match方法详解
      String.prototype.match()**String.prototype.match()方法返回通过一个正则表达式匹配到的字符串结果。**varparagraph='Thequickbrownfoxjumpsove......