以对象作为输入参数的Java抽象方法
我可以使这段代码在没有对象作为抽象方法的输入参数的情况下工作。例如,如果我亲自将以对象作为输入参数的Java抽象方法,java,abstract,Java,Abstract,我可以使这段代码在没有对象作为抽象方法的输入参数的情况下工作。例如,如果我亲自将printInformation()方法的输入参数设置为printInformation(int x),emp就会起作用 当我将输入参数作为printformation()方法的对象时,它抛出了一个错误 emp不是抽象的,也不重写抽象方法 person类emp中的printInformation(person)扩展person{^ 您的接口具有如下定义的函数: void printInformation(person
printInformation()
方法的输入参数设置为printInformation(int x)
,emp就会起作用
当我将输入参数作为printformation()
方法的对象时,它抛出了一个错误
emp不是抽象的,也不重写抽象方法
person类emp中的printInformation(person)扩展person{^
您的接口具有如下定义的函数:
void printInformation(person p);
void printInformation(emp e);
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
}
您的类具有如下定义的函数:
void printInformation(person p);
void printInformation(emp e);
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
}
这些函数不同。Java认为第二个函数是一个新的重载方法,而不是来自接口的方法的实现。因为类
emp
不是声明为抽象的,但没有为抽象方法void printInformation(person)提供实现
,这是错误的。我会这样做:
void printInformation(person p);
void printInformation(emp e);
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
}
奇怪的是,
person.printInformation
需要另一个person
。难道它不应该从正在访问的person
实例中打印信息吗?而且,Java惯例是以大写字母开头类名,例如,person
和Employee
。我的问题更多的是一个概念问题……我是还是个新手。如果输入参数不是对象类型,为什么我可以重写?如果它是int这样的基本类型,我可以重写它。我不明白你说它们不是相同的函数。如果输入参数不是对象类型,为什么我可以重写?如果它是int这样的基本类型,我可以重写它。两个函数h具有不同参数的同一名称是而不是同一函数。@jahroy…它们怎么可能是不同的参数?Person是一个超类,emp是它的子类…此外,您可以将超类变量引用到子类对象。@user547453-在int
的情况下,您是在重载方法,而不是重写它。它们是确实,由于签名的缘故,函数是分开的。@user547453:Person是一个超类,emp是子类,是的。这就是为什么它们是不同的函数,因为类型Person
和emp
不是同一类型。它们密切相关,但不同。要正确实现,您需要printInformati在
函数上可以接受一个person
参数。你没有,你只有一个printInformation
函数可以接受一个emp
。这意味着用person
实例调用你的人找不到他们可以使用的实现。太好了!但这是否意味着在Java中我必须定义一个Interface是否重写将对象作为输入参数的抽象方法?如果您正在实现另一个具有相同名称并使用不同参数的方法,则不会重写该方法…这将被称为重载
。您可以重写将对象作为参数的抽象方法…您只需要使用相同的参数ters!更改参数类型并仍被视为实现同一接口方法的唯一方法是使用泛型,如本答案所示。在没有泛型的情况下,在确定接口方法是否已实现时,不考虑类层次结构。您必须准确。也就是说,因为被雇佣者是一个人,任何接受一个人的方法都将自动接受一名员工。(谷歌利斯科夫替代原则)