繁体   English   中英

从超类调用方法

[英]Calling a method from a superclass

你好。 我试图通过子类从超类调用一个方法,但不断收到错误。 我试图调用的方法是setDestination()但是编译器一直给我错误“找不到符号 - 方法setDestination(java.lang.string)”我的讲师说这是方法参数的简单错过匹配调用和方法,但我有类型String两个方法参数所以我有点困惑。

我的代码是:

超级车辆:

     public class Vehicle
     {
     // A unique ID for this vehicle
     private String id; 
     // The next destination of this Vehicle.
     private String destination;

     /**
     * Constructor for objects of class Vehicle
     */
     public Vehicle(String id)
     {
         destination = null;
     }

     /**
     * Return the ID of the Vehicle.
     * @return The ID of the Vehicle.
     */
     public String getID()
     {
        return id;
     }

     /**
     * Return the destination of the Vehicle.
     * @return The destination of the Vehicle.
     */
     public String getDestination()
     {
         return destination;
     }

     /**
     * Set the intented destination of the Vehicle.
     * @param destination The intended destination.
     */
     private void setDestination(String destination)
     {
         this.destination = destination;
     }
}

子类Taxi

public class Taxi extends Vehicle
{
    // The location of this taxi.
    private String location;
    // Whether it is free or not.
    private boolean free;

   /** 
    * Constructor for objects of class Taxi.
    * @param base The name of the company's base.
    * @param id This taxi's unique id.
    */
    public Taxi(String base, String id)
    {
         super(id);
         location = base;
         free = true;
    }

   /**
    * Book this taxi to the given destination.
    * The status of the taxi will no longer be free.
    * @param destination The taxi's destination.
    */
    public void book(String destination)
    {
        setDestination(destination);
        free = false;
    }

   /**
    * Return the status of this taxi.
    * @return The status.
    */
    public String getStatus()
    {   
        return getID() + " at " + location + " headed for " +
        destination;
    }

    /**
     * Return the location of the taxi.
     * @return The location of the taxi.
     */
     public String getLocation()
     {
         return location;
     }

     /**
     * Indicate that this taxi has arrived at its destination.
     * As a result, it will be free.
     */
     public void arrived()
     {
         location = destination;
         destination = null;
         free = true;
     }
 }

任何帮助非常感谢。

这是一种private方法。 您无法访问私有方法。 将其更改为受保护。

您只能在班级中访问私人会员。

   Modifier Class   Package Subclass    World
    ---------------------------------------------
    public      Y      Y        Y           Y
    protected   Y      Y        Y           N
    no modifier Y      Y        N           N
    private     Y      N        N           N

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

您已将setDestination定义为private

private void setDestination(String destination) 

所以你不能通过继承访问它。 将其更改为protected或“公共”。 此处了解有关访问修饰符的更多信息

private Modifier无法从类外部访问。

私有方法不会被继承,超类引用会调用自己的私有方法。

使用private void setDestination(String destination)代替

 public void setDestination(String destination) 

暂无
暂无

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

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