Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java学习多态性_Java_Polymorphism - Fatal编程技术网

java学习多态性

java学习多态性,java,polymorphism,Java,Polymorphism,我仍然是一个学习型学生,我在这里学习多态性,这是给我的一个活动。我无法理解如何使用多态性。我这里有4个类RunQuad作为它的主类,另外三个是多态性应该发生的地方,我不知道如何通过多态性在主类中使用它。仍然没有为矩形创建部分代码,因为我仍在处理第一个。这项活动还有一个继续,但我想我会试着理解这项活动的答案,然后在剩下的部分单独进行 我想要的输出: 按R键表示矩形,按S键表示正方形 -有4条等边 -有四个直角 -是四边形 import java.util.*; class Quadri

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

我想要的输出:

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

-有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?
        }
        
    }
}

如果声明了一个类型为
四边形
的局部变量,并为该变量指定了一个新的
矩形
正方形
对象,则可以调用
showsdescription()
方法

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

仅供参考:如果希望调用同时打印来自超类的消息,则需要将这些方法更改为同时调用
super
方法


因为这显然是一个需要您完成的练习,所以我不会给您实际的代码,但希望这个描述能有所帮助。

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

如果您有一个由
四边形
对象组成的数组,则可以实例化许多
正方形
s和
矩形
s,并将它们(实际引用)放入数组中。然后,您可以对它们中的任何一个调用
showDescription()
方法,而不必关心它们是哪个类

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

这就是拥有子类的意义所在;基类表示一个对象,该对象具有不同的特定行为,但与其他对象具有相同的一般行为,这是因为子类是超类的特例


在您的程序中,您可以声明一个类型为
四边形的变量
;当用户选择哪一个时,您可以在该变量中存储
Rectangle
的实例或
Square
的实例,然后可以对该变量调用
showDescription()
,因为它与存在哪个实例无关。但这是多态性的一个很弱的说明。

如果我理解正确,我应该这样说:四边形四边形=新四边形();四边形squ=新正方形();四边形矩形=新矩形();不是这样:四边形四边形=新四边形();Square squ=新的Square();矩形rect=新矩形()@理查德约翰逊6,你们应该#2和#3,但分配给相同的局部变量,这取决于用户的输入。这样,您只需要编写一个对
showDescription()
的调用,展示多态性是如何工作的。哎呀,等等。。我应该调用正方形或矩形,然后使用super方法。。对吗?明白了,非常感谢