多态你真的了解吗?

简介: 多态你真的了解吗?

概念


面向对象的三大特性之一“多态”。多态表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。多态首先是建立在继承的基础上的,先有继承才能有多态。多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。多态成立的另一个条件是在创建子类时候必须使用父类new子类的方式。


例子理解


父亲是唱戏的,但是这天父亲需要让儿子代替自己去上台。这个时候


1、子类是以父类的身份上台


2、子类模仿父类的唱戏手法表演。注意这里说的是模仿,模仿也就是学的在像也不是儿子自己的方法。


3、子类自己特有的方法不可以展现出来


代码体现


有一个加减乘除的计算方法。以下是父类


//运算类
public class Operation{
  private double _numberA=0;
  private double _numberB=0;
  public double GetNumberA(){
  return _numberA;
  }
  public void SetNumberA(double NumberA){
  _numberA=NumberA;
  }
    public double GetNumberB(){
  return _numberB;
  }
  public void SetNumberA(double NumberB){
  _numberA=NumberB;
  }
  public double GetResult(){
    double result=0;
    return result;
  }
}


子类继承父类


//加法类
public class OperationAdd extends Operation{
  @override
  public double GetResult(){
       return super.GetNumberA()+super.GetNumberB();
  }
}
//减法类
public class OperationSub extends Operation{
  @override
  public double GetResult(){
       return super.GetNumberA()-super.GetNumberB();
  }
}


多态的体现是在父类的引用指向子类的 对象


//简单工厂类
public class OperationFactory{
  public static Operation createOperate(String operate){
    Operation oper=null;
    switch (operate){
        case "+"
          oper=new OperationAdd();
        break;
        case"-"
          oper=new OperationSub();
        break;
    }
    return oper;
  }
}



简单总结:多态的前提是建立在继承之上的,父类需要有一个虚拟的方法(虚方法),子类去重写父类的方法,也就是父类的引用指向子类的对象,Animal animal=new Cat();


相关文章
|
11月前
|
Oracle 关系型数据库 数据库
oracle数据恢复—Oracle数据库文件损坏导致数据库打不开的数据恢复案例
打开oracle数据库时报错,报错信息:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。急需恢复zxfg用户下的数据。 出现上述报错的原因有:控制文件损坏、数据文件损坏、数据文件与控制文件的SCN不一致等。数据恢复工程师对数据库文件做进一步检测分析后发现sysaux01.dbf文件有坏块。修复sysaux01.dbf文件,启动数据库依然有许多查询报错。export和data pump工具无法使用,查询告警日志并分析报错,确认发生上述错误的原因就是sysaux01.dbf文件损坏。由于该文件损坏,从数据库层面无法修复数据库。由于system和用户表空间的数据文件是正常的,
|
数据库
SqlServer如何给表添加新的字段以及字段注释
SqlServer如何给表添加新的字段以及字段注释
543 1
|
机器学习/深度学习 算法
基于CNN-GRU-Attention的时间序列回归预测matlab仿真
基于CNN-GRU-Attention的时间序列回归预测matlab仿真
修改端口范围
1、查看命令 [root@www ~]# sysctl -a | grep local 或cat /proc/sys/net/ipv4/ip_local_port_range 2、修改端口范围 1)永久修改 vi /etc/sysctl.conf 添加下面一行: net.ipv4.ip_local_port_range = 1024 65535 然后执行: sysctl -p 生效。
1465 0
|
缓存 安全 Java
[√]cocos2dx 垃圾回收机制
[√]cocos2dx 垃圾回收机制
186 0
类和对象-封装-封装中的三种访问权限
类和对象-封装-封装中的三种访问权限
94 0
|
存储 监控 算法
代码调试技巧
代码调试技巧
|
JavaScript CDN
vue_按需引入elment、echarts和路由懒加载,减少打包体积
vue_按需引入elment、echarts和路由懒加载,减少打包体积
268 0
|
PHP 数据安全/隐私保护
php-面向对象OOP
php-面向对象OOP
98 0