Java是一种面向对象的编程语言,继承和接口是面向对象语言中重要的概念之一。继承和接口都可以用来扩展类的功能,但它们之间有一些显著的不同。下面将详细介绍Java中继承和接口的概念及其使用方法。
继承
继承是指一个类可以基于另一个类的定义来创建,继承的类称为子类,被继承的类称为父类或超类。子类可以复用父类中的代码,并在此基础上添加新的方法和数据成员。
语法
Java中继承使用关键字 extends
进行声明。下面是一个 Employee
类,具有 name
和 salary
实例变量,以及 getName()
和 getSalary()
方法。
class Employee {
private String name;
private double salary;
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
}
现在,我们可以创建一个子类 Manager
,来继承 Employee
类的定义。代码如下:
class Manager extends Employee {
private double bonus;
public Manager(String name, double salary, double bonus) {
super(name, salary);
this.bonus = bonus;
}
public double getBonus() {
return bonus;
}
public double getSalary() { // override the method defined in Employee
return super.getSalary() + bonus;
}
}
在此示例中,我们使用关键字 extends
将 Manager
类继承自 Employee
类。由于 Manager
继承了 Employee
,因此我们可以使用 Employee
中定义的方法 getName()
和 getSalary()
。此外,我们还添加了新的实例变量 bonus
,并重写了 getSalary()
方法以计算总收入(包括工资和奖金)。
示例
下面是一个完整的示例,其中 Employee
和 Manager
都被声明在一个名为 InheritanceExample
的类中:
class InheritanceExample {
public static void main(String[] args) {
Employee employee = new Employee("Alice", 50000);
Manager manager = new Manager("Bob", 60000, 10000);
System.out.println(employee.getName() + " " + employee.getSalary());
System.out.println(manager.getName() + " " + manager.getSalary() + " " + manager.getBonus());
}
}
// output:
// Alice 50000.0
// Bob 70000.0 10000.0
这个示例中,我们创建了一个 Employee
和一个 Manager
实例。我们可以通过调用它们的 getName()
和 getSalary()
方法来获取它们的信息。
接口
接口是一种可以为空的类,不包含任何实现代码,而仅仅是定义了方法声明。接口可以让不同的类实现相同的行为、方法集合,用于达成一种规范。
语法
Java中接口使用 interface
关键字进行声明。下面是一个定义了一个 Drawable
接口:
interface Drawable {
public void draw();
}
在此示例中,我们定义了一个名为 Drawable
的接口,其中只有一个方法 draw()
。该方法没有实现代码,只是一个简单的声明。任何实现该接口的类都必须提供适当的实现代码。
示例
下面是一个完整的示例,其中实现了 Drawable
接口:
public class InterfaceExample implements Drawable {
public void draw() {
System.out.println("Drawing a shape...");
}
public static void main(String[] args) {
InterfaceExample example = new InterfaceExample();
example.draw();
}
}
// output:
// Drawing a shape...
在此示例中,我们创建了一个 InterfaceExample
类,并实现了 Drawable
接口。我们必须提供适当的 draw()
方法的实现代码。在 main()
方法中,我们创建了一个 InterfaceExample
实例,并调用 draw()
方法。
继承和接口的区别
继承和接口都可以用来实现类之间的关系,但它们之间有几个显著的不同点:
- 一个类只能继承一个类,但可以实现多个接口。
- 继承可以复用现有代码,而接口只是对类的行为进行了规范。
- 继承关系是静态的,在编译时进行解析;而接口实现关系是动态的,在运行时进行解析。
总之,继承和接口提供了不同的方法来描述类之间的关系,可以使用它们来实现多态性和代码复用等特性。需要根据实际情况进行选择。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java之继承和接口的概念 - Python技术站