从超类调用子类方法,这在另一个子类中不可用

时间:2014-12-16 06:55:43

标签: java

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

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;
    }
}

我想从主类访问非常用方法或如何从超类人员访问getnoOfPub和getMembNo方法?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

  1. 可能是您希望超类中的方法在子类中被覆盖。
  2. 您需要从Person投射到子类MemberAuthor并使用您的方法。
  3. 您需要启动MemberAuthor的变量,然后使用这些方法。
  4. 不太可能,但可能是 - 你希望方法是静态的