Java 试图从子类调用变量

Java 试图从子类调用变量,java,inheritance,composition,Java,Inheritance,Composition,我要做的是调用port.getferry.getname();但当我试图编译它时,它会告诉我 “找不到符号k=port.getferry.getname() 符号:变量getferry 位置:class Port“ 我只是不知道该怎么办我试着把变量从private改为protected或public,但没有任何改变这只是我程序的一小部分所以我不会给你一个复杂的程序 class tp{ public static void main(String args[]){ Por

我要做的是调用
port.getferry.getname()
;但当我试图编译它时,它会告诉我

“找不到符号k=port.getferry.getname()

符号:变量getferry

位置:class Port“

我只是不知道该怎么办我试着把变量从private改为protected或public,但没有任何改变这只是我程序的一小部分所以我不会给你一个复杂的程序

class tp{

    public static void main(String args[]){
        Port[] port=new Port[1];
        String k,limenas;
        Ferry[] ferry=new Ferry[1];
        String name=UserInput.getString();
        ferry[1]=new Ferry(name);
        port[1]=new Port(limenas,ferry[1]);
        k=port[1].getferry.getname();
  }

}

class Port{
    private String limenas;
    public Ferry ferry;
    Port(String li,Ferry ferry){
        limenas=li;
        this.ferry=ferry;
    }
    public String getlimenas(){
        return limenas;
    }
    public Ferry getferry(){
        return ferry;
    }
}

class Ferry extends Vessel{
    Ferry(String name){
        super(name);
    }
}

class Vessel{
    private String name;
    Vessel(String n){
         name=n;
    }
    public String getname(){
         return name;
    }
}

问题是您试图调用一个没有括号的方法

port.getferry();  //will return a ferry object.  

ferry.getname();  //will return the name of the ferry object.
要链接它们,您应该尝试:

port.getferry().getname();  
这将返回一个ferry对象并从中获取名称,返回一个字符串

如果您有一个端口对象数组,也可以调用

port[1].getferry().getname() 

它将在阵列参考1中的端口处获得渡轮,如上所述,前提是端口是您的端口阵列的名称。

最终您将遇到阵列问题

Java数组从0开始

端口[]端口=新端口[1];//长度为1的数组

k=端口[1]。。。将获取ArrayIndexOutOfBounds异常


端口[0]有效,端口[1]无效

尝试port.getferry().getname()在我的主程序中,我有一个端口数组,它会在那里工作吗?类继承是一个很大的PITA。尽量避免。阅读Gamma等人的“设计模式”以了解替代方案。然而,类继承是OOP的一个重要方面,您至少应该了解它是如何工作的