Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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 - Fatal编程技术网

Java 从另一个子类中不可用的超类调用子类方法

Java 从另一个子类中不可用的超类调用子类方法,java,Java,我有一个超类Person和两个子类Author和Member,如下所示 public class Author extends Person { public Author(String fName, String lName, int noOfPublications){ ----// set } public String getnoOfPub(){ return noOfPublications; } } public class

我有一个超类
Person
和两个子类
Author
Member
,如下所示

public class Author extends Person {    
  public Author(String fName, String lName, int noOfPublications){
      ----// set 
  }    
   public String getnoOfPub(){
     return noOfPublications;
  }
}

public class Member extends Person {

public Member(String fName, String lName, int memberNo){
----// set 
}    
 public String getMembNo(){
        return memberNo;
    }
}

我想从main类访问非通用方法,或者如何从superclass person访问getnoOfPub和getMembNo方法?

您可以通过检查对象的类型并将其强制转换为相关子类的类型来访问非通用方法,但这不是您希望在基类代码中执行的操作

在Person方法中,您可以编写:

public void someMethod ()
{
    String id = null;
    if (this instanceof Member) {
        Member member = (Member) this;
        id = member.getMembNo ();
    }
}

虽然这是有效的语法,但这是一种非常糟糕的做法,因为基类不应该知道它的子类,因为子类可以在基类编写之后很久再编写,因此,基类的作者不能假设他们知道所有扩展基类的子类。

这个问题很难回答,因为它非常广泛。但我会回答常见的错误:

  • 您可能希望在子类中重写超类中的方法
  • 您需要从
    Person
    强制转换为子类
    Member
    Author
    ,并使用您的方法
  • 您需要启动
    Member
    Author
    变量,然后使用这些方法
  • 不太可能,但可能是-您希望该方法是静态的