Java继承、构造函数、方法重写及访问修饰符详解
立即解锁
发布时间: 2025-08-18 01:52:44 阅读量: 1 订阅数: 9 

# Java 继承、构造函数、方法重写及访问修饰符详解
## 1. 继承的好处
继承带来了代码的可重用性,同时也产生了更小的模块(因为类被拆分为超类和子类)。通常,更小的模块是有益的,因为在查找错误或进行升级时,需要处理的代码更少。
## 2. Person/Employee/FullTime 层次结构的实现
### 2.1 Person 类
```java
/*******************************************************
* Person.java
* Dean & Dean
*
* The is a base class for an inheritance hierarchy.
*******************************************************/
public class Person
{
private String name = "";
//****************************************************
public Person()
{ }
public Person(String name)
{
this.name = name;
}
//****************************************************
public String getName()
{
return this.name;
}
} // end Person class
```
Person 类主要用于存储一个名称,并通过 `getName` 访问器方法来获取该名称。其中,零参数构造函数允许在不指定名称的情况下创建 Person 对象,为避免字符串实例变量的默认值为 `null`,`name` 被初始化为空字符串。需要注意的是,一旦编写了自己的构造函数,编译器自动提供的零参数默认构造函数就会消失,如果需要,必须显式编写。
### 2.2 Employee 类
```java
/********************************************
* Employee.java
* Dean & Dean
*
* The describes an employee.
********************************************/
public class Employee extends Person
{
private int id = 0;
//*****************************************
public Employee()
{ }
public Employee(String name, int id)
{
super(name);
this.id = id;
}
//*****************************************
public void display()
{
System.out.println("name: " + getName());
System.out.println("id: " + id);
}
} // end Employee class
```
Employee 类继承自 Person 类,通过 `extends` 关键字实现继承。该类定义了一个实例变量 `id`,并且继承了 Person 类的 `name` 实例变量。在 `display` 方法中,由于 `name` 是 Person 类的私有实例变量,因此需要通过调用 `getName` 访问器方法来获取。在实例方法中,调用同一类或超类中的方法时,引用变量的点前缀是不必要的。
### 2.3 子类中的构造函数
#### 2.3.1 使用 `super` 调用超类构造函数
在 Employee 类的双参数构造函数中,使用 `super(name)` 调用了 Person 类的单参数构造函数,以初始化继承的 `name` 实例变量。调用 `super` 只能在构造函数中进行,并且必须是构造函数的第一行。
#### 2.3.2 默认调用超类构造函数
如果编写子类构造函数时不包含对其他构造函数(使用 `this` 或 `super`)的调用,Java 编译器会默认插入对超类零参数构造函数的调用。例如,以下两个构造函数在功能上是等效的:
```java
public Employee()
{ }
public Employee()
{
super();
}
```
显式调用 `super()` 可以使代码更具自文档性。每当调用构造函数时,JVM 会自动沿着层次结构树向上运行到最顶层的祖先构造函数,先执行该构造函数,然后依次执行下面的构造函数,最后执行最初调用的构造函数中的其余代码。
## 3. 方法重写
### 3.1 方法重写的概念
方法重写是指子类中的方法与超类中的方法具有相同的名称、相同的参数类型序列和相同的返回类型。默认情况下,子类对象使用子类的重写方法,而不是超类的被重写方法,这符合编程中的“局部优先于全局”原则。
### 3.2 方法重写示例
```java
/*************************************************************
* FullTime.java
* Dean & Dean
*
* The describes a full-time employee.
*************************************************************/
public class FullTime extends Employee
{
private double salary = 0.0;
//**********************************************************
public FullTime()
{ }
public FullTime(String name, int id, double salary)
{
super(name, id);
this.salary = salary;
}
//**********************************************************
public void display()
{
super.display();
System.out.printf(
"salary: $%,.0f\n", salary);
}
} // end Full
```
0
0
复制全文
相关推荐










