代码学习-多态

简介: 代码学习-多态

代码学习-多态


什么是多态


“指为不同数据类型的实体提供统一的接口。”这是在百度百科上面看到的内容。


通过在现实生活中的理解就是同样的一个命令,在不同的人身上体现出不同的结果,举个例子就是去上学这件事情在不同年龄段的人体现出来的就不一样,3-6岁的孩子要去幼儿园,6-12岁的孩子要去小学,13-16-就是中学,以此类推,这就是在现实生活中的多态,那么在代码中我们可以看看是什么样子的。


多态在代码中的体现


这里代码我们以大话设计模式的简单工厂为例,这里以它为例是因为入门简单好理解。而且多态的体现更加突出。

首先这里是一个运算的父类


//运算类
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;
  }
}

下面这两个是运算子类,他们都继承了运算父类,别切都重写的GetResult()这个方法。

//加法类
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();
  }
}

然后这是我们的简单工厂类,上面的几个都是我们正常的继承与重写这些操作,那么下面这里的工厂类就做了一个重大的变化,可以看到createOperate()这个方法返回值类型是一个运算类的类型,而且在这个方法中可以看到有一个Operation类型的引用和一个switch case的选择语句,在这个选择分支中可以看到我们这个oper引用指向了子类的对象,那么当父类的引用指向了子类的对象也就意味着现在的这个对象使用的方法将会是子类的方法。

//简单工厂类
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;
  }
}

上面说到了父类在指向子类的对象时可以使用子类的方法, 那么在客户端这里就体现出来了,我们在使用createOperate()这个方法传入的参数就是"+",那么此时的oper这对象是一个加法类型的子类对象,那此时使用的GetResult()方法就是一个进行加法计算得到的结果,如果我在createOperate()这个方法中传入的是“-“,那么这个对象就是一个减法类型的子类对象。同理那么这个GetResult()这个方法就是进行减法运算的。

这就是在代码中体现出来的多态,需要的是通过父类的引用指向子类的实现,这就是设计原则中的里氏替换。这在外界看来就是一个operation类进行的同一个操作,但是操作的结果不同。

//客户端类
public class client{
  public static void main(String[] args){
    Operation oper;
    oper=OperationFactory.createOperate("+");
    oper.setNumberA(8);
    oper.setNumberB(9);
    double result= oper.GetResult();
     System.out.println(result);
  }
}

多态的重点是什么


通过上面的描述我们可以看到,有了多态我们可以应对不同的情况,而且只需要继承父类进行重写,那么对应的就是为了更好的扩充,有了多态就增加了可扩充的空间。所以多态是为了可扩充,而对应的继承是为了更好的复用。这也是面向对象三大特征体现出来的不同侧重点。

相关文章
|
1月前
|
编译器 C++
C++入门12——详解多态1
C++入门12——详解多态1
38 2
C++入门12——详解多态1
|
1月前
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
79 1
|
4月前
|
存储 编译器 C++
|
5月前
|
Java
JavaSE——面向对象高级二(1/4)-面向对象三大特征之三-多态(认识多态、使用多态的好处、多态下的类型转换问题)
JavaSE——面向对象高级二(1/4)-面向对象三大特征之三-多态(认识多态、使用多态的好处、多态下的类型转换问题)
34 0
|
编译器 C++
【C++】多态学习总结
多态就是调用一个函数时,展现出多种形态。比如买火车票这件事,普通人是全价,学生是半价,这就是一种多态。 多态分为静态的多态和动态的多态:
|
安全 Java 编译器
多态的学习
多态的学习
54 0
|
存储 编译器 C++
【C++】多态及原理
【C++】多态及原理
47 0
|
算法 C++ 索引
c++学习之多态
c++学习之多态
61 0
|
Java
Java面向对象多态
多态概述 Java 多态是指同一种类型的对象,在不同的情况下有着不同的状态和行为。它是基于继承、重写和向上转型等特性实现的,多态是面向对象编程的三大特征之一,其他两个分别是封装和继承。 Java 多态包括以下三种方式 方法重写(Override) 子类可以对从父类继承的方法进行重写,以便根据子类的需要来覆盖掉父类中的方法实现。这样在调用时,可以根据对象的不同来执行对应的方法。
68 0