Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当子类和超类都实现同一个接口时会发生什么_Java_Oop - Fatal编程技术网

Java 当子类和超类都实现同一个接口时会发生什么

Java 当子类和超类都实现同一个接口时会发生什么,java,oop,Java,Oop,当这两个类都实现抽象方法getVehicle()时,这里实际发生了什么?子类是否覆盖了超级类getvehicle(),或者接口getvehicle()?子类的实现将覆盖超级类的实现。说子类将重写接口的方法没有任何意义,因为接口不提供实现(除非您谈论的是Java8默认接口方法) 顺便说一句,声明超级类实现接口就足够了。子类将隐式地实现它,而不声明它实现了它 所以即使你写: interface Vehicle { public abstract void getVehicle();

当这两个类都实现抽象方法
getVehicle()
时,这里实际发生了什么?子类是否覆盖了超级类
getvehicle()
,或者接口
getvehicle()

子类的实现将覆盖超级类的实现。说子类将重写接口的方法没有任何意义,因为接口不提供实现(除非您谈论的是Java8默认接口方法)

顺便说一句,声明超级类实现接口就足够了。子类将隐式地实现它,而不声明它实现了它

所以即使你写:

interface Vehicle
{   
    public abstract void getVehicle();      
}

public class HelloWorld  implements Vehicle{
@Override
public void getVehicle() 
 {
    System.out.println("HelloWorld Implementation");        
 }
}

class MyWorld extends HelloWorld implements Vehicle
{       
@Override
public void getVehicle() 
 {
    System.out.println("MyWorld Implementation");       
 }   
}

MyWorld
仍然执行
车辆

  • 接口定义了“应该有哪些方法”
  • 父类定义该方法
  • 子类定义并重写父类中定义的方法
因此,它的行为将与任何其他继承一样

(即使在接口[Java 8]中提供了默认方法实现)

尽管如此,在子类中实现接口(当父类已经实现相同接口时)对行为没有影响。这样做在某些情况下有助于提高可读性

public class HelloWorld implements Vehicle
class MyWorld extends HelloWorld