仍然是一个学习的学生,我在这里学习多态性,这是给我的一个活动。我不明白如何使用多态性。我在这里有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
类型的局部变量,并为该变量分配了一个新的Rectangle
或Square
对象,那么您可以调用showDescription()
方法。
由于多态,该方法调用将调用实际对象上的方法版本,而不考虑局部变量的声明类型。
供参考:如果您希望调用也打印来自超类的消息,那么方法需要更改为也调用super
方法。
由于这显然是一个需要您完成的练习,所以我不打算给您实际的代码,但希望这个描述对您有所帮助。
这里没有足够的问题来说明多态性,或者至少说明它的有用性。
如果您有一个Quadrilateral
对象的数组,您可以实例化一些Square
和Rectangle
对象,并将它们(实际上是对它们的引用)放入数组中。然后你可以调用showDescription()
方法,而不用关心它们是哪个类。
同样地,你可以有一个对象数组,比如Shape
,它代表屏幕或页面上不同的形状,每个对象都有一个draw()
方法;你可以对数组的每个成员调用它来(重新)绘制页面上的所有形状,调用者不必知道每个形状是什么。
这就是拥有子类的意义所在;基类代表一个对象,它与其他对象具有不同的特定行为,但有一些相同的一般行为,这是因为子类是超类的特殊情况。
在程序中,你可以声明一个Quadrilateral
类型的变量;当用户选择哪一个时,您可以在该变量中存储Rectangle
的实例或Square
的实例,然后可以在该变量上调用showDescription()
,因为哪个实例在那里并不重要。但这是多态性的一个非常弱的说明。