簡體   English   中英

Java:使用孩子的成員變量調用父母的方法

[英]Java: Calling a parent's method with child's member variable

假設我有一個抽象父類,它具有在方法中使用的成員變量。

public abstract class Person{
    public String jobTitle;
    public void printJob(){
        System.out.println(jobTitle);
    }
}

如果我現在有兩個子類

public class Teacher extends Person{
    public String jobTitle = "Teacher";
}
public class Janitor extends Person{
    public String jobTitle = "Janitor";
}

並且我想避免代碼克隆,即在兩個類中實現相同的 printJob() 方法,我現在遇到了問題,因為 printJob() 方法無法訪問子類的成員變量。

有什么方法可以調用父類的方法但讓該方法使用子類的成員變量?

您可以使用這樣的抽象方法

public abstract class Person {
   public void printJob() {
      System.out.println(getJobTitle());
   }

   protected abstract String getJobTitle();

   public static void main(String[] args) {
      Person teacher = new Teacher();
      Person janitor = new Janitor();

      System.out.println(teacher.getJobTitle());
      System.out.println(janitor.getJobTitle());
   }
}

class Teacher extends Person {
   @Override
   protected String getJobTitle() {
      return "Teacher";
   }
}

class Janitor extends Person {
   @Override
   protected String getJobTitle() {
      return "Janitor";
   }
}

在 op 對代碼克隆的評論后更新...

public class Person {
   public static void main(String[] args) {
      System.out.println(new Teacher().job);
      System.out.println(new Janitor().job);
   }

   private static class Teacher extends Person {
      private String job = "Teacher";
   }

   private static class Janitor extends Person {
      private String job = "Janitor";
   }
}

假設我有一個抽象的父類,該類具有在方法中使用的成員變量。

public abstract class Person{
    public String jobTitle;
    public void printJob(){
        System.out.println(jobTitle);
    }
}

如果我現在有兩個孩子班

public class Teacher extends Person{
    public String jobTitle = "Teacher";
}
public class Janitor extends Person{
    public String jobTitle = "Janitor";
}

並且我想避免代碼克隆,即在兩個類中實現相同的printJob()方法,我現在遇到了一個問題,因為printJob()方法無法訪問子類的成員變量。

有什么方法可以調用父類的方法,但是讓該方法使用子類的成員變量?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM