java学习多态性
我仍然是一个学习型学生,我在这里学习多态性,这是给我的一个活动。我无法理解如何使用多态性。我这里有4个类RunQuad作为它的主类,另外三个是多态性应该发生的地方,我不知道如何通过多态性在主类中使用它。仍然没有为矩形创建部分代码,因为我仍在处理第一个。这项活动还有一个继续,但我想我会试着理解这项活动的答案,然后在剩下的部分单独进行 我想要的输出: 按R键表示矩形,按S键表示正方形 -有4条等边 -有四个直角 -是四边形java学习多态性,java,polymorphism,Java,Polymorphism,我仍然是一个学习型学生,我在这里学习多态性,这是给我的一个活动。我无法理解如何使用多态性。我这里有4个类RunQuad作为它的主类,另外三个是多态性应该发生的地方,我不知道如何通过多态性在主类中使用它。仍然没有为矩形创建部分代码,因为我仍在处理第一个。这项活动还有一个继续,但我想我会试着理解这项活动的答案,然后在剩下的部分单独进行 我想要的输出: 按R键表示矩形,按S键表示正方形 -有4条等边 -有四个直角 -是四边形 import java.util.*; class Quadri
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?
}
}
}
如果声明了一个类型为
四边形
的局部变量,并为该变量指定了一个新的矩形
或正方形
对象,则可以调用showsdescription()
方法
由于多态性,该方法调用将调用实际对象上的方法版本,而不管局部变量的声明类型如何
仅供参考:如果希望调用同时打印来自超类的消息,则需要将这些方法更改为同时调用super
方法
因为这显然是一个需要您完成的练习,所以我不会给您实际的代码,但希望这个描述能有所帮助。这里没有足够的问题来说明多态性,或者至少说明它的有用性 如果您有一个由
四边形
对象组成的数组,则可以实例化许多正方形
s和矩形
s,并将它们(实际引用)放入数组中。然后,您可以对它们中的任何一个调用showDescription()
方法,而不必关心它们是哪个类
类似地,您可以有一个对象数组,比如说,形状
,在屏幕或页面上表示不同的形状,每个对象都有一个draw()
方法;您可以在数组的每个成员上调用它来(重新)绘制页面上的所有形状,调用者不必知道各个形状是什么
这就是拥有子类的意义所在;基类表示一个对象,该对象具有不同的特定行为,但与其他对象具有相同的一般行为,这是因为子类是超类的特例
在您的程序中,您可以声明一个类型为
四边形的变量
;当用户选择哪一个时,您可以在该变量中存储Rectangle
的实例或Square
的实例,然后可以对该变量调用showDescription()
,因为它与存在哪个实例无关。但这是多态性的一个很弱的说明。如果我理解正确,我应该这样说:四边形四边形=新四边形();四边形squ=新正方形();四边形矩形=新矩形();不是这样:四边形四边形=新四边形();Square squ=新的Square();矩形rect=新矩形()@理查德约翰逊6,你们应该#2和#3,但分配给相同的局部变量,这取决于用户的输入。这样,您只需要编写一个对showDescription()
的调用,展示多态性是如何工作的。哎呀,等等。。我应该调用正方形或矩形,然后使用super方法。。对吗?明白了,非常感谢