一个小! 2022-07-06 13:27 采纳率: 100%
浏览 31
已结题

父类方法传入的参数是子类类型

父类方法传入的参数是子类类型

观看别人代码的时候发现父类中的一个方法定义的传入值是子类类型,基础不太牢固,不太明白为什么这样用可以成功
父类car

package test;

public abstract class car {
    
     public car() {}
     
      public void run(boolean value) {
            if (value == true)
              System.out.println("this car is running!");
          }
      
      public abstract void TestWorking(Working carname);

}

子类Working


package test;

public class Working extends car{

    private Object value;

    public void run(boolean value) {}
    
    public Working() {
        
    }
     
    public Working(Working value) {
          this();
          }
     
    public void TestWorking(Working carname) {
        System.out.println(carname.getValue().toString());
    }

    public Object getValue() {
        return value;
    }

    public void setValue(Object value) {
        this.value = value;
    }
}

执行的代码testrunning


package test;

public class testrunning {

    public static void main(String[] args) {
        Working work = new Working();
        
        work.setValue("nissa");
        work.TestWorking(work);

    }
}

最后是成功得到了nissa的结果,

img

但是我对父类car中的这段代码实在不太理解

 public abstract void TestWorking(Working carname);
目前代码是否使用到链式调用呢 ?感觉很像

以及一开始的问题是觉得父类中调用子类类型为什么不报错,后来测试了一下觉得是因为加载的时候都先加载各自的构造函数,所以在TestWorking方法被加载之前子类构造函数已经存在才不会报错?不知道这样理解是否正确
然后认为testworking是否是向上转型,但是仔细看了一下向上转型的demo感觉不是

这几段代码应该是用了哪些方法呢
  • 写回答

1条回答 默认 最新

  • 一头小山猪 一头小山猪(个人IP)官方账号 2022-07-06 14:12
    关注

    感觉有一丢丢的混乱,在编译阶段,一个类中能够定义什么样的类型和子父类关系不大,主要取决于它是否有权限访问到对应的类型(也就是由权限修饰符控制)。
    你是想问为什么car中可以使用Working类型吗?
    这个和子父类是没有关系的,因为是在编译阶段,你只要保证你所引用的类是存在的,能够访问的就可以,并且只是一个简单的参数列表类型声明。
    编译通过之后已经产生了各种class文件,在执行时也是这些在起作用,只要类存在就可以加载到的,感觉你想的貌似过于复杂了。。。
    有帮助请采纳,还有不懂的可以继续追问~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月13日
  • 已采纳回答 8月5日
  • 创建了问题 7月6日

悬赏问题

  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上