我如何在main中调用接口方法?

时间:2017-02-09 06:42:00

标签: java

我有一个在类上实现的抽象方法,但是当我尝试从main调用此方法时,它不会显示在我的方法列表中。除了来自界面的方法之外,所有其他方法都显示。我做错了什么?

public interface Printable {
    public void print();
} 

实现可打印。

@Override
    public void print() {
        for(int i = 0; i < getLength(); i++){
            for(int j = 0; j < getLength(); j++){
                System.out.println("o");
            }
            System.out.println();
        }   
    }

使用主要的可打印方法调用不可用。

if(shapes[i] instanceof Printable) {
    shapes[i]
}

2 个答案:

答案 0 :(得分:3)

虽然您检查了形状是否可在此打印:

if(shapes[i] instanceof Printable){
编译器不知道你做了什么。它仍然认为shapesShape的数组,但未实现Printable。你必须告诉编译器“我确实 检查shape[i] 是否可打印,所以打印出来!”

如何告诉它呢?

角色!

if(shapes[i] instanceof Printable){
    ((Printable)shape[i]).print();
}

您之前可能使用过此(type)value语法。它强制将value转换为type。您可能已使用它将float值转换为int。这是同样的事情!

答案 1 :(得分:0)

你的类,实现可打印,必须声明“实现Printable”,仅仅拥有正确的方法是不够的

还有:

if(shapes[i] instanceof Printable){
     shapes[i]
}

不打印

如果您的基本数组类型是不能实现Printable的类,您可以将其更改为使用Philipp写的内容

class Base {}

class Shape extends Base implements Printable {
    void print()...
}

Base[] shapes = ....;

if(shapes[i] instanceof Printable) {
    Printable.class.cast(shapes[i]).print()   
}

或者

class Shape implements Printable {
    void print()...
}

Shape[] shapes = ....;

Shapes[i].print(); // no instanceof or cast necessary