【问题标题】:Static Polymorphisam and Dynamic Polymorphisam [duplicate]静态多态和动态多态[重复]
【发布时间】:2014-06-30 23:51:02
【问题描述】:

我最近参加了一次采访。面试官问了一个类似

的问题
  1. 什么是静态多态和动态多态???

我在互联网上进行了搜索,但无法找到答案。谁能帮我解决这个问题...

感谢和问候, 阿马尔

【问题讨论】:

  • 是专门针对 Java 职位的吗?
  • 你用谷歌搜索了吗??

标签: java


【解决方案1】:

多态的类型

1) 静态或编译时多态性

仅在编译时决定调用哪个方法。方法重载就是一个例子。方法重载是一个概念,我们在同一个类中多次使用相同的方法名,但参数不同。根据我们传递的参数,它仅在编译时决定。具有相同参数的相同方法名称是错误的,这是 c# 不允许的方法重复的情况。在静态多态中,决定是在编译时做出的。

public Class StaticDemo
{
    public void display(int x)
    {
        Console.WriteLine(“Area of a Square:”+x*x);
    }

    public void display(int x, int y)
    {
        Console.WriteLine(“Area of a Square:”+x*y);
    }

    public static void main(String args[])
    {
        StaticDemo spd=new StaticDemo();
        Spd.display(5);
        Spd.display(10,3);
    }
}

2) 动态或运行时多态性。

运行时多态性也称为方法覆盖。在此机制中,如果基类包含被覆盖的方法,则在运行时(而不是在编译时)解决对覆盖函数的调用。方法覆盖意味着拥有两个或多个具有相同名称、相同签名但具有不同实现的方法。在这个过程中,通过超类的引用变量调用被覆盖的方法,调用方法的确定是根据引用变量所引用的对象来确定的。

什么是多态性?聚意味着许多。那么我们如何在 .NET 上下文中采用这个定义。好吧,我们可以将此应用于类共享相同方法(操作)但实现方式不同的能力。

假设我们在一个类中有一个添加数字的方法,

public class calculation
{
    public int add(int x, int y)
    {
        return x+y;
    }
}

所以要执行三个数字的加法,我们需要类似的add方法,但参数不同

public class calculation
{
    public int add(int x, int y)
    {
        return x+y;
    }

    public int add(int x, int y,int z)    
    {
        return x+y+z;
    }
}

所以我们可以让该类共享相同的方法(操作),但实现方式不同。

现在这是一个示例,当我们共享方法名称并以不同方式实现它们时,让我们看一个实现在某个派生类中的场景。

例如,假设我们创建了一个名为 Shape 的类,并且该类有一个名为 .Area () 的方法来计算面积。然后我们使用继承创建这个 Shape 类的两个子类。一个叫Square,另一个叫Circle。现在显然正方形和圆形是两种完全不同的形状,但两个类都有 .Area() 方法。当 Square.Area() 方法被调用时,它将计算正方形的面积。当调用 Circle.Area() 方法时,它将计算圆的面积。所以两个类可以使用相同的方法,但实现方式不同。

【讨论】:

    【解决方案2】:

    运行时多态示例

    在这个例子中,我们创建了两个类 Bike 和 Splendar。 Splendar 类扩展了 Bike 类并覆盖了它的 run() 方法。我们通过 Parent 类的引用变量调用 run 方法。由于它引用了子类对象,并且子类方法覆盖了Parent类方法,所以子类方法在运行时被调用。

    由于方法调用是由 JVM 而不是编译器决定的,所以称为运行时多态。

    class Bike{  
      void run(){System.out.println("running");}  
    }  
    class Splender extends Bike{  
      void run(){System.out.println("running safely with 60km");}  
    
      public static void main(String args[]){  
        Bike b = new Splender();//upcasting  
        b.run();  
      }  
    }
    

    Java 运行时多态的真实例子

    考虑一个场景,Bank 是一个提供获取利率的方法的类。但是,利率可能因银行而异。例如,SBI、ICICI 和 AXIS 银行可以提供 8%、7% 和 9% 的利率

    class Bank{  
    int getRateOfInterest(){return 0;}  
    }  
    
    class SBI extends Bank{  
    int getRateOfInterest(){return 8;}  
    }  
    
    class ICICI extends Bank{  
    int getRateOfInterest(){return 7;}  
    }  
    class AXIS extends Bank{  
    int getRateOfInterest(){return 9;}  
    }  
    
    class Test{  
    public static void main(String args[]){  
    Bank b1=new SBI();  
    Bank b2=new ICICI();  
    Bank b3=new AXIS();  
    System.out.println("SBI Rate of Interest: "+b1.getRateOfInterest());  
    System.out.println("ICICI Rate of Interest: "+b2.getRateOfInterest());  
    System.out.println("AXIS Rate of Interest: "+b3.getRateOfInterest());  
    }  
    }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多