Java多态性如何为子类对象调用父类(super class)方法

标签 java methods polymorphism subclass

这是我想问的一个例子

父类(super class) Name.java

public class Name{
  protected String first;
  protected String last;

      public Name(String firstName, String lastName){
         this.first = firstName;
         this.last = lastName;
      }

       public String initials(){
         String theInitials = 
            first.substring(0, 1) + ". " +
            last.substring(0, 1) + ".";
         return theInitials;
      } 

然后子类是ThreeNames.java

public class ThreeNames extends Name{
  private String middle;

   public ThreeNames(String aFirst, String aMiddle, String aLast){
     super(aFirst, aLast);
     this.middle = aMiddle;
  }

   public String initials(){
     String theInitials = 
        super.first.substring(0, 1) + ". " +
        middle.substring(0, 1) + ". " +
        super.last.substring(0, 1) + ".";
     return theInitials;
  }

因此,如果我使用 ThreeNames example1 = new ThreeNames("Bobby", "Sue""Smith") 创建一个 Threename 对象,然后调用 System.out.println(example1.initials ()); 我会得到 B.S.S. 我明白了。

我的问题是有没有一种方法可以调用 Name 类中的 initials 方法,以便我的输出只是 B.S.

最佳答案

没有。一旦你覆盖了一个方法,那么从外部对该方法的任何调用都将被路由到你覆盖的方法(当然,除非它在继承链的下方再次被覆盖)。 你只能从你自己重写的方法中调用 super 方法,如下所示:

public String someMethod() {
   String superResult = super.someMethod(); 
   // go on from here
}

但这不是您在这里寻找的。 你也许可以把你的方法变成:

public List<String> getNameAbbreviations() {
   //return a list with a single element 
}

然后在子类中这样做:

public List<String> getNameAbbreviations() {
   List fromSuper = super.getNameAbbreviations();
   //add the 3 letter variant and return the list 
}

关于Java多态性如何为子类对象调用父类(super class)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14907424/

相关文章:

java - 以下 java 代码给出输出 1 2 3 。代码是如何执行的?

java - 如何在我的类中设置要调用到方法中的值“Present Value”

java - 保持方法之间的随机数相同

java - List<Dog> 是 List<Animal> 的子类吗?为什么 Java 泛型不是隐式多态的?

java - 以自定义的可序列化形式存储对象

Java如何显示已读取的记录范围

java - 通过Java中的方法传递变量

java - 重写 toString() 是否被视为多态?

c++ - 模板化基类还有一个共同的基类指针?

Java:连接到数据库以获取数据