[英]Difference between inheritance & polymorphism
我在理解什么是多态性以及它与继承有何不同方面存在问题。 我研究了网络,并找到了许多答案,这些答案对多态性是什么提供了非常技术上的定义,但我对它的理解并不多。 我想出了一个例子,可能是多态性,但可能不是。
我的例子:
假设您拥有一个拥有许多会员级别的体育馆。
每个班级都是基本成员,但功能更多
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;
}
}
这是继承或多态性还是两者的一个例子? 请解释.....
您的示例演示了继承。
多态允许您编写适用于任何Animal的方法:
public void pet(Animal animal) {
...
}
此方法将接受Dog,Cat等,包括尚未编写的Animal子类。
继承使派生类共享其基类的接口和代码。 这是“类”从现有“类”派生的时间。 因此,如果您有Animal类,那么您有一个Cow类扩展了Animal,Cow继承了Animal具有的所有内容(取决于访问修饰符)。
公共类动物{...}
公共课狗延伸动物{...}
Dog d = new Dog();
d.DoAnimalStuff();
任何语言的继承都是一种多态性。 多态是指以相同的方式处理多个事物(多个类,多个函数等)的能力。 Inheretance允许这样做,因为您可以将任何类型视为基类。 Java中多态的另一种形式是泛型-您可以传递任何类型,只要它定义了您需要的所有功能即可。
继承是一个逻辑与另一个具有相同逻辑的对象。 继承可以节省代码行。
多态性允许将多个对象安全地存储在同一位置,并使用相同的代码进行操作
假设d
从b
继承/暗示
Base b = new Derived d;
b.DoThingsThatBasesCanDo();
您的示例只是继承,但是根据您的用法,它可能会变成多态
如果poolPriceDis
是基类的成员,则它会更加多态,您可以在派生类中重写它,或者在各自类的构造函数中对其进行初始化。
使用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中出现的第二种多态性是具有相同方法和不同参数的能力。 例如,一个数字可能有一个采用整数的加法,而另一个则采用双精度法:
public class MyNumber
{
public void add(int i){...}
public void add(double d){...}
}
具有相同方法的两个版本是多态的另一种形式。
多态有多种形状和大小,其中之一就是继承。
继承使您可以像使用同一类一样使用对象,而实际上它们可能是不同的类。 查看示例代码。
通过重载,您可以将具有不同类型参数的函数用作相同的函数。 例如:add(“ hello”,“ world”)和add(1,2)。
参数化使您可以使用与类型无关的函数或类,只要您事先告知即可。 例如:Vector <Float>与Vector <String>。
在所有情况下,您都会看到此“不同/许多”(多边形)充当“相同/相似形状”(变形)。
引用面向对象设计与模式中的 Cay Horstmann先生:
为特定对象选择适当方法的能力称为多态性 。 (术语“多态”的字面意思是“具有多种形状”。)
和
您可以使用继承对类之间的关系进行建模,其中一个类代表一个更通用的概念,另一个代表更专业的概念。
就您而言,您只是在使用继承。 但是,如果您要覆盖SilverMember类中的setRate setRate()
方法,并且在主类中具有以下内容:
basicMember member = new silverMember();
member.setRate(20);
然后,尽管您具有basicMember变量,但将调用silverMember类的setRate()
。 那是多态性。
-
如果我不建议您如果您不了解这种事情,那么我对自己不忠实。 尝试阅读我在评论开头引用的书。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.