子类?

kmb7vmvb  于 2021-07-08  发布在  Java
关注(0)|答案(3)|浏览(159)

我面临一个执行问题。问题是在java中是否可以将“祖父”转换为“孩子”。
例如:
这是父类

public class IDDocument {
    public IDDocument() {
    }
  }

这是从其父级iddocument继承的类

public class Passport extends IDDocument {
    public Passport() {
    }
  }

现在,有一个类继承自passport

public class SLPassport extends Passport {
    public SLPassport() {
    }
  }

知道这一点,我想知道是否有可能将iddocument转换为slpassport。
这个问题产生于这样一个事实,即我从服务接收的信息包含在iddocument类型中,但我还需要仅包含在slpassport中的数据,因此有必要使用iddocument。
以前,我可以将passport转换为iddocument,如下所示:

((Passport) idDocument).getSomeMethod();

所以我检索了只有子类包含的数据。
如我所说,我的目标是用iddocument从passport子类中捕获数据。

yvt65v4c

yvt65v4c1#

slpassport对象可以强制转换为:iddocument、passport、object或slpassport
如果你做了这样的事:

Passport myPass = new SLPassport();
SLPassport mySlPass = (SLPassport) myPass;

这是有效的。

yfwxisqw

yfwxisqw2#

如果有一个类a,一个从a继承的类b,还有一个从b继承的类c,那么类c也从a继承。以下是与您的问题相关的多态性的解释。

fjaof16o

fjaof16o3#

简单的回答是肯定的,假设这个示例真的是一个 SLPassport 示例。我还建议你在施法前明确检查这个,以避免 ClassCastException 学生:

if (idDocument instanceof SLPassport) {
    ((SLPassport) idDocument).doSomethingSpecific();
} else {
    System.err.println("Not an SLPassport"); // Or some better error handling
}

相关问题