我在理解究竟什么是多态性以及它与继承的区别方面存在问题。我研究过网络,发现了许多答案,这些答案给出了关于多态性的非常技术性的定义,但我真正理解的并不是什么。我想出了一个可能是多态的例子,但可能不是。
我的例子:
假设您拥有一个拥有多个会员级别的健身房。
并且每个类都是基本成员但具有更多功能
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;
}
}
这是继承或多态还是两者的一个例子?请解释.....
答案 0 :(得分:3)
您的示例演示了继承。
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)
继承是一个具有与另一个对象相同逻辑的对象,具有一些额外的逻辑。继承可以为您保存代码行。
多态性允许多个对象在类型安全地存储在同一个地方,并使用相同的代码进行操作
假设d
从b
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变量。这是多态性。
-
如果你不知道这种事情,如果我没有建议你不要做这次采访,我就不会对自己忠诚。试着阅读我在评论开头引用的那本书。