学习多态性java



仍然是一个学习的学生,我在这里学习多态性,这是给我的一个活动。我不明白如何使用多态性。我在这里有4个类RunQuad作为它的主类,其他三个是多态性应该发生的地方,我不知道如何通过多态性在主类中使用它。仍然没有创建矩形的部分代码因为我还在处理第一个。这个活动还在继续,但我想我会试着理解这个问题的答案,然后在剩下的问题上独唱。

我要的输出:

按R表示矩形,按S表示正方形。

S

-有4个等边

-有4个直角

是四边形

import java.util.*;    
class Quadrilateral 
{
public void showDescription()
{
System.out.println("- quadrilateral");
}
}
class Rectangle extends Quadrilateral
{
Rectangle()
{
super();
}

public void showDescription()
{
System.out.println("- has 4 right angles");
}
}
class Square extends Rectangle
{
Square()
{
super();
}

public void showDescription()
{
System.out.println("- has 4 equal sides");
}
}

public class RunQuad
{
public static void main(String[]args)
{
Scanner input = new Scanner(System.in);
char sr;

System.out.println("Press R for Rectangle or S for Square. ");
sr = input.nextLine().charAt(0);

if(Character.toUpperCase(sr) == 'S')
{
//polymorph here?
}

}
}

如果您声明了一个Quadrilateral类型的局部变量,并为该变量分配了一个新的RectangleSquare对象,那么您可以调用showDescription()方法。

由于多态,该方法调用将调用实际对象上的方法版本,而不考虑局部变量的声明类型。

供参考:如果您希望调用也打印来自超类的消息,那么方法需要更改为也调用super方法。

由于这显然是一个需要您完成的练习,所以我不打算给您实际的代码,但希望这个描述对您有所帮助。

这里没有足够的问题来说明多态性,或者至少说明它的有用性。

如果您有一个Quadrilateral对象的数组,您可以实例化一些SquareRectangle对象,并将它们(实际上是对它们的引用)放入数组中。然后你可以调用showDescription()方法,而不用关心它们是哪个类。

同样地,你可以有一个对象数组,比如Shape,它代表屏幕或页面上不同的形状,每个对象都有一个draw()方法;你可以对数组的每个成员调用它来(重新)绘制页面上的所有形状,调用者不必知道每个形状是什么。

这就是拥有子类的意义所在;基类代表一个对象,它与其他对象具有不同的特定行为,但有一些相同的一般行为,这是因为子类是超类的特殊情况。

在程序中,你可以声明一个Quadrilateral类型的变量;当用户选择哪一个时,您可以在该变量中存储Rectangle的实例或Square的实例,然后可以在该变量上调用showDescription(),因为哪个实例在那里并不重要。但这是多态性的一个非常弱的说明。

最新更新