继承与差异之间的区别多态性

时间:2013-06-17 21:51:17

标签: java inheritance polymorphism

我在理解究竟什么是多态性以及它与继承的区别方面存在问题。我研究过网络,发现了许多答案,这些答案给出了关于多态性的非常技术性的定义,但我真正理解的并不是什么。我想出了一个可能是多态的例子,但可能不是。

我的例子:

假设您拥有一个拥有多个会员级别的健身房。

  1. 基本会员
  2. 银卡会员
  3. 金牌会员
  4. 并且每个类都是基本成员但具有更多功能

    class basicMember(){
    private double rate = 10;
    privatedbl poolPrice = 5;
    
    public void setRate (dbl in);
    {
     rate = in;
    }
    public dbl getRate()
    {
     return rate;
    }
    public dbl getPoolPrice()
    {
     return poolPrice;
    }
    } 
    
    class silverMember extends basicRate()
    {
     private dbl poolPriceDis = .9;
    setRate(15);
    
    public dbl getPoolPriceDis(){
    return getPoolPrice() * poolPriceDis;
    }
     } 
    
    class goldMember extends basicRate(){
    private dbl poolPriceDis = .85;
    setRate(20);
    
    public dbl getPoolPriceDis(){
    return getPoolPrice() * poolPriceDis;
    }
    }
    

    这是继承或多态还是两者的一个例子?请解释.....

6 个答案:

答案 0 :(得分:3)

您的示例演示了继承。

  • Polymorphism允许您在不知道类的确切类型的情况下调用类的方法。它涉及程序如何决定应该使用哪些方法,具体取决于它具有的对象类型。如果你有一个带有eat方法的Animal,你有一个扩展Animal的Cow,它有自己的Eat实现,这个方法被调用取决于你有一个指向Animal或Cow的指针。

Polymorphism允许您编写适用于任何Animal的方法:

public void pet(Animal animal) {
   ...
}

此方法将接受Dog,Cat等,包括尚未编写的Animal的子类。

  • 继承允许派生类共享其基类的接口和代码。当“阶级”来自现有的“阶级”时。因此,如果你有一个Animal类,那么你有一个扩展Animal的Cow类,Cow继承了Animal所有的东西(取决于访问修饰符)。

    公共类动物{...}

    公共类Dog扩展Animal {...}

    狗d =新狗();

    d.DoAnimalStuff();

答案 1 :(得分:1)

任何语言的继承都是一种多态。多态性是以相同的方式处理多个事物(多个类,多个函数等)的能力。 Inheretance允许这样做,因为您可以将任何类型视为基类。 Java中的另一种形式的多态性是泛型 - 只要它定义了你需要的所有函数,你就可以传入任何类型。

答案 2 :(得分:1)

继承是一个具有与另一个对象相同逻辑的对象,具有一些额外的逻辑。继承可以为您保存代码行。

多态性允许多个对象在类型安全地存储在同一个地方,并使用相同的代码进行操作

假设db

继承/暗示
Base b = new Derived d;

b.DoThingsThatBasesCanDo();

您的示例只是继承,但它可以根据您的使用情况变为多态

如果poolPriceDis是您的基类的成员,它会更加多态,您可以在派生类中覆盖它,也可以在各自类的构造函数中初始化它

答案 3 :(得分:1)

使用Java ...

继承是定义添加或扩展另一个类的类的概念。也可以改变一个班级。例如,老板可以通过增加要求加薪的能力来扩展员工。

public class Employee
{
    ...
}

public class Boss extends Employee
{
    public void askForRaise(){}
}

多态性,可以用几种方法。让我们看看其中两个。首先,不同的类可以使用相同的方法执行不同的操作,例如,我们可以定义一个表示所有形状的Shape类,并具有draw方法。

public abstract class Shape
{
    public abstract void draw();
}

正方形将实现绘制以绘制正方形,而圆形将绘制圆形。两者都是绘制,但做不同的事情,这是第一种多态性。

public class Square extends Shape
{
    public void draw(){...}
}

public class Circle extends Shape
{
    public void draw(){...}
}

值得注意的是,我们在这个例子中也使用了继承。 Square和Circle继承自Shape,因此它们具有Shape所具有的所有方法和属性。

在Java中出现的第二种多态性是能够使用不同参数的相同方法。例如,一个数字可能有一个采用整数的add方法,另一个采用double的方法:

public class MyNumber
{
    public void add(int i){...}
    public void add(double d){...}
}

具有相同方法的两个版本是另一种形式的多态性。

答案 4 :(得分:0)

多态性有多种形状和大小,其中一种是遗传。

继承允许您使用对象,就好像它们属于同一个类,实际上它们可能是不同的类。请参阅示例代码。

重载允许您使用具有不同类型参数的函数,就好像它们是相同的一样。例如:add(“hello”,“world”)和add(1,2)。

参数化允许您使用不关心类型的函数或类,只要您事先告知它。例如:Vector< Float>与Vector< String>。

在所有情况下,您都会看到“不同/很多”(多边形)充当“相同/相似形状”(变形)。

答案 5 :(得分:0)

面向对象设计& amp;图案

  

为特定对象选择适当方法的能力是   称为多态。 (术语“多态”字面意思是“有   多个形状“。)

  

使用继承来模拟其中的类之间的关系   一个类代表更一般的概念,另一个代表更多   专业概念。

在您的情况下,您只是使用继承。但是,如果您要覆盖,请使用silverMember类中的setRate()方法,并在主要内容中使用类似的方法:

basicMember member = new silverMember();
member.setRate(20);

然后调用silverMember类的setRate(),尽管你有一个basicMember变量。这是多态性。

-

如果你不知道这种事情,如果我没有建议你不要做这次采访,我就不会对自己忠诚。试着阅读我在评论开头引用的那本书。