博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多态存在的3个必要条件
阅读量:5257 次
发布时间:2019-06-14

本文共 1346 字,大约阅读时间需要 4 分钟。

1.要有继承 2.要有方法的重写 3.父类引用指向子类对象
(对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接)   对于多态,可以总结它为:   一、使用父类类型的引用指向子类的对象;   二、该引用只能调用父类中定义的方法和变量;   三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)   四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。   五、如果继承的子类继承父类的的一个方法后加以重载,则该父类的引用不能使用重载之后的那个方法。   代码示例:   package Class.   public class Animal {
  private String str;   public void voice() {
  System.out.println("普通叫声");   }   }   class cat extends Animal {
  public void voice() { //子类中对父类 voice 方法的重写   System.out.println("喵喵喵");   }   }   class Dog extends Animal {
  public void voice() {
  System.out.println("汪汪汪");   }   public void lookdoor()   {
  System.out.println("看门的小狗...");   }   }   class Tiger extends Animal {
  public void voice() {
  System.out.println("哇哇哇");   }   }   package Class.   public class Test {
  public static void testanimalvoice(Animal c) {
  c.voice();   }   public static void main(String[] args) {
  Animal a = new cat(); // 父类的引用指向子类的对象   Animal b = new Dog(); // new后面一定是一个类,它是用来创建一个对象或实例,一个普通类在没有new之前他的属性,方法在内存中都是不存在的,   Animal c = new Tiger();//也就是说, 只有new后这些才会在内存中存在。也就是说只有new了之后,这个类才能用.   testanimalvoice(a);   testanimalvoice(b);   testanimalvoice(c);   Dog b2 = (Dog) b; // 类对象的强制转化   b2.lookdoor();   }   }

转载于:https://www.cnblogs.com/cristin/p/8011255.html

你可能感兴趣的文章
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>
ip相关问题解答
查看>>
MetaWeblog API Test
查看>>
反弹SHELL
查看>>
关闭Chrome浏览器的自动更新和升级提示
查看>>
移动、尺寸改变
查看>>
poj2255Tree Recovery【二叉树重构】
查看>>
tcpcopy 流量复制工具
查看>>
vue和react的区别
查看>>
第十一次作业
查看>>
负载均衡策略
查看>>
微信智能开放平台
查看>>
ArcGIS Engine 中的绘制与编辑
查看>>
Oracle--通配符、Escape转义字符、模糊查询语句
查看>>
子网划分讲解及练习(一)
查看>>
c# 文件笔记
查看>>
第一页 - 工具的使用(webstorm)
查看>>
Linux 进程资源用量监控和按用户设置进程限制
查看>>
IE浏览器整页截屏程序(二)
查看>>
D3.js 之 d3-shap 简介(转)
查看>>