我有一个在类上实现的抽象方法,但是当我尝试从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]
}
答案 0 :(得分:3)
虽然您检查了形状是否可在此打印:
if(shapes[i] instanceof Printable){
编译器不知道你做了什么。它仍然认为shapes
是Shape
的数组,但未实现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