多态性:构造函数不接受参数

时间:2013-03-07 22:51:53

标签: java constructor arguments polymorphism

当我编译它时,我收到一条错误消息,指出Video的预期构造函数参数是“无参数”

import java.util.*;

abstract class Thing
{

}

class Video extends Thing
{
    String description;
    int price;
    String title;

    void Video ( String d , int p, String t)
    {
        this.description = d;
        this.price = p;
        this.title = t;
    }

    String getDescription()
    {
        return description;
    }
}

class BookOnTape extends Thing
{
    String description;

    void BookOnTape ( String d )
    {
        description = d;
    }

    String getDescription()
    {
        return description;
    }
}

class Funiture extends Thing
{
   String description;

    void Furniture ( String d )
    {
        description = d;
    }

    String getDescription()
    {
        return description;
    }
}

public class Lookup
{
    /*private static HashMap<Thing, Integer> rentalList;

    static
    {
        rentalList = new HashMap<Thing, Integer>();
        rentalList.put( new Video(5), new Integer( 0 ) );
    }*/

    public static void main( String args[] )
    {
        System.out.println("fart");

        Thing farmer = new Video( "fgfg", 5, "gfgf" );
    }
}

编译时:

class A
{
}

class B extends A
{
    String name;

    B ( String n )
    {
        this.name = n;
    }
}


class TestPoly
{
    public static void main( String args[] )
    {
        A poly = new B( "test" );
    }
}

工作正常。我没有看到差异。这里有什么不对吗?...

2 个答案:

答案 0 :(得分:4)

void Video ( String d , int p, String t)

这不是constructor。这就是编译器抱怨的原因:它无法找到构造函数Video(String, int, String),因为代码中没有它。删除void会将其变为一,因为方法需要返回值,而构造函数则没有。

(更多)更具信息性的讨论是here

答案 1 :(得分:0)

void Video ( String d , int p, String t) is a method not a constructor. 
  

Constructor's没有返回类型甚至无效。

现在,这是一个构造函数:

 Video ( String d , int p, String t)