Java 使用接口重写的方法

Java 使用接口重写的方法,java,Java,Q> 作为接口,我不包含抽象方法toString(),但仍然编译以下代码。怎么做 当使用超类变量引用子类obj时,编译器首先在超类中搜索类似的方法,如果未找到,则给出错误。 此处接口不包含方法toString() ex=> 所有类都从对象继承。对象有一个toString 要使用任何接口,它必须由实际的类支持。因此Java编译器知道,在处理接口时,它可以使用Java.lang.Object中定义的任何方法 换一种稍微不同的方式: class A { void show() { Sys

Q> 作为接口,我不包含抽象方法toString(),但仍然编译以下代码。怎么做


当使用超类变量引用子类obj时,编译器首先在超类中搜索类似的方法,如果未找到,则给出错误。 此处接口不包含方法toString()

ex=>


所有类都从对象继承。对象有一个toString

要使用任何接口,它必须由实际的类支持。因此Java编译器知道,在处理接口时,它可以使用Java.lang.Object中定义的任何方法

换一种稍微不同的方式:

class A
{
  void show()
  {
   System.out.println("show");
  }
}

class B
{
  void show()
  {
   System.out.println("show B");
  }

  void display()
  {
   System.out.println("display B");
  }

  public static void main(String s[])
  {
    A a=new B();
    a.show();           //will execute
    a.display();        //give error 
} 
有“魔力”

因此,当使用I详细说明时,您可以使用Objects方法。但是,您不能使用具体类中未出现在接口中的任何方法。因此,请结合两个示例:

interface I extends Object { ... }
因为“toString()”位于派生每个非基本数据的类对象中。所以每个对象都有这个方法。

Java中的每个类都是一个,因此,它们总是能够运行以下方法:

  • 克隆()
  • 相等(对象)
  • 定稿
  • getClass()
  • hashCode()
  • 通知()
  • notifyAll()
  • toString()
  • 等等
  • 等待(长)
  • 等待(长,整数)

在Java中,您构造的每个类都从基类对象继承。
这意味着您的类在默认情况下将有许多有用的方法,其中包括toString()。

当使用超类变量引用子类obj时,编译器首先在超类中搜索类似的方法,如果没有找到,则给出错误。此处接口不包含方法toString()。ex=>类A{void show(){System.out.println(“show A”);}}类B{void show(){System.out.println(“show B”);}void display(){System.out.println(“display B”);}公共静态void main(字符串s[]){A A=new B();A.show();//将执行A.display();//给出错误}所有类都继承自Java中的Object,因此Java知道当遇到接口时,它将由一个具体的类支持,因此将在Java.lang.Object中定义方法
interface I { ... }
interface I extends Object { ... }
interface Car { 
   void drive();
}

class Convertible implements Car { 
  void drive() {} 
  void openRoof() {} 

  public static void main() {
     Car porscheBoxster = new Convertible();
     porscheBoxster.drive(); // OK - exists in interface
     porscheBoxster.toString(); // OK - exists in java.lang.Object.
     porscheBoxster.openRoof(); // Error. All we know is the porscheBoxster is of type Car. 
         // We don't know if it is a Convertible or not.
  }
}