java - 类中的私有(private)接口(interface)

标签 java oop interface software-design

Here我遇到了这个短语:

Implementing a private interface is a way to force the definition of the methods in that interface without adding any type information (that is, without allowing any upcasting).

我发现很难理解这一点。 有人可以为我解释一下吗?

最佳答案

这是一个私有(private)接口(interface)的例子。

public class Main  {

    private interface Animal {
        void makeNoise();
    }

    public static final class Cow implements Animal {
        @Override
        public void makeNoise() {
            System.out.println("Moo!");
        }
    }

    public static final class Sheep implements Animal {
        @Override
        public void makeNoise() {
            System.out.println("Bah!");
        }
    }

    public static void main(String[] args) {
        List<Animal> animals = Arrays.asList(new Cow(), new Sheep());
        for (Animal animal : animals)
            animal.makeNoise();
    }
}    

Main 类中,您可以引用 Animal 并对其调用 makeNoise()。因此,您可以拥有一个包含不同类型的 AnimalList,并使用 for each 循环对它们全部调用 makeNoise()

但是,在 Main 类之外这是不可能的。你可以有一个 Cow 或一个 Sheep 并在其中一个上调用 makeNoise(),但是接口(interface) Animal 和接口(interface)方法 makeNoise() 是不可见的。

关于java - 类中的私有(private)接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27579860/

相关文章:

javascript - JavaScript 是按引用传递还是按值传递?

java - 常量内部接口(interface)

C# - 接口(interface)拆分?

java - Java Servlet 中的 UTF-8 在部署到 Azure 网站时不起作用

java - 传递和修改全局数组

java - 新手遇到数组问题

java - 将下载的 .js 文件添加到 Netbeans 中的现有项目中

swift - 如何避免重写父类(super class)初始值设定项

java - 这个先决条件是否违反了里氏替换原则

typescript - 如何确保装饰器的参数 "target"扩展 typescript 中的接口(interface)?