当前位置: 首页 > 知识库问答 >
问题:

Java中继承如何使用方法引用操作符

商开济
2023-03-14

接口

public interface InterfaceOne {
    void start();
    void stop();
}

主要类别

public class MainProg {
    public static void main(String [] args){
        new ServiceA().start();
    }
}

服务A

import java.util.ArrayList;
import java.util.List;

public class ServiceA implements InterfaceOne{
    private final List<ServiceB> worker = new ArrayList<>();
    public ServiceA(){
        for(int i = 0; i < 2; i++){
            worker.add(new ServiceB(2));
        }
    }

    @Override
    public void start() {
        worker.forEach(InterfaceOne::start);
    }

    @Override
    public void stop() {
        worker.forEach(InterfaceOne::stop);
    }
}

服务B

public class ServiceB extends ServiceC{
    int count;
    protected ServiceB(int num){
        this.count = num;
    }
}

服务C

public class ServiceC implements InterfaceOne{
    @Override
    public void start() {
        System.out.println("Starting..");
    }

    @Override
    public void stop() {
        System.out.println("Stopping..");
    }
}

在这里,从主类中,我调用了ServiceA的方法,但ServiceC的方法是如何调用的?

此程序的输出正在启动。。启动。。

共有1个答案

刁丰羽
2023-03-14

您写道:

worker.forEach(InterfaceOne::start);

这会为工作列表的每个元素调用start方法。如果在ServiceA的方法范围内调用它并不重要,工作列表的元素是ServiceB的,它继承了ServiceC的start方法。

 类似资料:
  • 具有以下类别: 和 和 和 和 和 因此,应用程序需要动态实例化步骤子类对象,相应地设置配置并运行步骤,如下所示。 错误消息: "方法setConfig(捕获#8-of?扩展Config)在类型Step中 查看文档,在这种情况下,Java看起来不友好:https://docs.oracle.com/javase/tutorial/java/generics/wildcardGuidelines.h

  • 问题内容: 我们有下课: 输出为: 超 子 问题: 什么礼物?是父级的对象,哪个孩子作为字段保留? 如果是这样,抽象类的继承如何工作?您不能创建抽象类的实例。 如果不是,重写方法在哪里保留? 我尝试使用Google,但发现的只是关于如何继承类的常见信息。 更新: 您仍在告诉我明显的事情。也许我的问题没有引起误解,但我将尝试改写一下: 当我们使用调用方法时,您说的是,我们正在访问父级的方法。但是,如

  • 问题内容: 假设我有以下两个课程 如果我启动一个beta类型的新对象,如何执行在alpha类而不是beta中找到的逻辑?我可以使用<-我想知道是否可行。 Eclipse IDE中的自动键入功能使我可以选择从class 或class中进行选择。 问题答案: 你可以做: 注意,这是对父级的引用,但是super()是它的构造函数。

  • 我是一名新的Java开发人员,在Java中继承的概念定义我的类时遇到了一些困难。。。 在一方面,我有一个通用的类,名为车辆,它定义了几十年的属性(带有它们的getter/setters)。我有一个扩展车辆类的车辆1类。 另一方面,我有一个名为VehicleFactory的泛型类,它定义了一个静态方法,如下所示: 问题是我想创建一个Vehicle1Factory类,它有自己的makeResult方法

  • 1.子类扩展父类。2.子类实现Cloneable并重写clone()方法调用super。clone()3.父类既不实现Cloneable接口,也不重写clone(()方法。 输出:克隆父类和子类状态。 问题:在父类没有实现标记接口Cloneable的情况下,父类状态如何被对象类克隆?

  • 问题内容: 我对在继承中使用私有方法感到困惑,例如: 基于上面的代码,我感到困惑的私有方法的继承,是继承了私有方法来?还是两个类中的say方法完全无关?由于代码在main()方法中运行时出错,因此似乎无法从中调用私有方法。 问题答案: 如果您想让子类访问需要保留的超类方法,那么您正在寻找的关键字。 只允许包含该成员的类访问该成员。 允许在类及其所有子类中访问成员。 允许任何人访问该成员。