我可以使这个代码在没有对象作为抽象方法的输入参数的情况下工作。例如,如果我将printInformation()
方法的输入参数设置为人,将emp设为printInformation(int x)
则可以。
当我将输入参数作为printInformation()
方法的对象时,如下所示,它会抛出错误
emp不是抽象的,不会覆盖抽象方法 printInformation(person)in person class emp extends person {^
abstract class person{
abstract void printInformation(person p);
}
class emp extends person{
emp(){
System.out.println("This is a emp constructor");
}
void printInformation(emp e){
System.out.println("This is an emp");
}
}
class entity{
public static void main(String args[]){
emp employeeObject = new emp();
employeeObject.printInformation(employeeObject);
}
}
答案 0 :(得分:4)
您的界面具有如下定义的功能:
void printInformation(person p);
你的类有一个如下定义的函数:
void printInformation(emp e);
这些功能不同。 Java认为第二个是新的重载方法,而不是接口的方法实现。由于类emp
未声明为抽象,但未提供抽象方法void printInformation(person)
的实现,因此它是错误的。
答案 1 :(得分:3)
我会做这样的事情:
interface PrintsInformation<T> {
void printInformation( T t );
}
class Emp implements PrintsInformation<Emp> {
public void printInformation( Emp e ) {
System.out.println( "This is an emp" );
}
}
public static void main( String[] args ) {
Emp employeeObject = new Emp();
employeeObject.printInformation( employeeObject ); // compiles
}
解决问题的另一种方法是在对象打印时不传入对象 就这样做:
public void printInformation() {
// print "this" object, rather than the one passed in
System.out.println( "This is an emp" );
}