Java是一种面向对象的编程语言,允许你将一个class ,扩展到另一个class 。
扩展一个类也被称为继承机制。新的类继承了现有类的属性和行为。
继承很有用,因为你可以重复使用现有的类定义作为新类的基础。
在下面的代码中,Poodle 类继承了Dog 类,所以你可以从Poodle 实例中调用Dog 类的方法并访问其属性:
class Dog {
String genus = "Canis";
void bark() {
System.out.println("Woof!");
}
}
class Poodle extends Dog { }
class Main {
public static void main(String[] args) {
Poodle poo = new Poodle();
poo.bark(); // Woof!
System.out.println(poo.genus); // Canis
}
}
然而,Java并不支持多重继承。这意味着你不能在一个类中扩展两个或更多的类。
扩展多个类将导致Java在编译时抛出一个错误:
class Animal {
boolean alive = true;
}
class Poodle extends Dog, Animal { }
// ERROR: Class cannot extend multiple classes
当你需要在Java中扩展两个或多个类时,你需要将这些类重构为接口。
这是因为Java允许在一个类上实现多个接口。
在下面的代码中,Dog 和Animal 类被重构为接口:
interface Dog {
String genus = "Canis";
default void bark() {
System.out.println("Woof!");
}
}
interface Animal {
boolean alive = true;
}
class Poodle implements Dog, Animal { }
class Main {
public static void main(String[] args) {
Poodle poo = new Poodle();
poo.bark(); // Woof!
System.out.println(poo.genus); // Canis
System.out.println(poo.alive); // true
}
}
从上面的例子可以看出,Dog 和Animal 接口可以在Poodle 类中实现。
这使得你可以从任何Poodle 类的实例中访问Dog 和Animal 接口的属性和方法。
总而言之,Java的继承机制仅限于继承一个类,但在一个类上可以继承(实现)多个接口。
一个interface 是一个参考类型,用于指定一个class 的属性和行为。
你不能创建一个interface 的实例。相反,你需要在一个class 上实现interface ,并实例化实现class 。
当你需要扩展两个或更多的类时,使用接口是Java的唯一方法。