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