繁体   English   中英

Java子类构造函数分配值

[英]Java Subclass Constructor Assigning Values

我正在尝试使用子类的构造函数创建对象,但无法在子类的构造函数中为该对象分配值。

这是超类。

public class Bike
{
    String color = "";
    String type = "";
    int age = 0;

    public static void main (String [] args)
    {
    }

    public Bike (String s, int i)           // Constructor
    {
        color = s;
        age = i;
    }

    public void PrintBike ()
    {
        if (type == "")
        {
            System.out.print(" You didn't give the proper kind of bike."); 
        }
        else
        {
            System.out.print(" Your bike is a " + type + " bike. \n");
        }
    }
}

这是子类。

public class BikeAdv extends Bike
{
    private String type;

    public BikeAdv (String color, int age, String BikeType)
    {
        super (color, age);
        type = BikeType;
    }
 }

这是调用构造函数的类。

public class Green
{
    public static void main (String [] args)
    {
        Bike greenBike = new BikeAdv ("Green", 20, "Mountain");
        greenBike.PrintBike();
    }
}

当我运行“绿色”类时,输出为“您没有给正确类型的自行车”。 而我希望看到“您的自行车是山地自行车”。

谢谢!

type的子场阴影的type的超类领域。 超类中的字段永远不会被填充,这就是被检查的字段。

如果仅删除子类中的字段,则那里的赋值将填充超类字段,并且您的代码可能会按预期工作。

但是,正如在其他答案中指出的那样,最好根据您的需要将字段设置为私有或受保护,而不是默认可见性。

Bike类不是抽象的也不是接口,这意味着它的所有方法都与Bike类中所说的一样。 当您将greenBike分配为Bike而不是BikeAdv时,您告诉它使用Bike类而不是BikeAdv类中的方法。 最好的选择是使Bike抽象化,并使PrintBike保持空无主体。

另外:永远不要将BikeType字符串传递给超类,因此它无法接收它。

您已声明这些属性而没有明确的可见性:

    String color = "";
    String type = "";
    int age = 0;

此外,你必须type在重新声明BikeAdv ,这可能是一个错误(你不需要)。

如果要仅从其类访问这些属性,则应将它们声明为private 但是,在这种情况下,您必须对构造函数进行参数化,以便能够修改所有这些构造函数。 或者也许为他们创建setter(请注意,这样一来,您将在课堂之外授予访问权限)。

    private String color = "";
    private String type = "";
    private int age = 0;

如果您希望它们不能从其类外部进行修改,而可以从其子类进行访问,则将它们声明为受保护的:

    protected String color = "";
    protected String type = "";
    protected int age = 0;

如您所见,有很多可能性。 在这里查看它们:

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM