头歌第1关:父类和子类
时间: 2025-05-05 17:37:06 浏览: 26
### 面向对象编程中的父类与子类
#### 父类和子类的关系
在面向对象编程中,父类(也称为基类或超类)是指具有特定属性和行为的一般化实体。而子类是从父类派生出来的更具体化的实体。通过继承机制,子类能够获取并扩展父类的功能。
#### 构造函数的调用顺序
当创建一个子类的对象时,程序会按照一定的顺序执行构造过程:
- **先调用父类的构造函数**:这是为了确保从父类继承下来的成员已经被正确初始化[^1]。
- **再调用子类自身的构造函数**:在此之后,继续完成对子类特有成员的设置[^2]。
如果希望显式指定要使用的父类构造器,则可以在子类构造器的第一行使用`super()`语句来实现这一点[^3]。
```java
class Parent {
public Parent() {
System.out.println("Parent constructor called");
}
}
class Child extends Parent {
public Child() {
super(); // 显式的调用了父类无参构造方法
System.out.println("Child constructor called");
}
}
```
#### 方法覆盖与多态性
除了可以直接访问父类的方法外,子类还可以重新定义这些方法的行为——即所谓的“覆写”。这种特性允许不同类型的对象表现出不同的响应方式,即使它们共享相同的操作名称。下面的例子展示了如何在一个简单的场景下应用这一概念:
```java
// 定义父类 Base 及其 calculate 方法
class Base {
int x, y;
void setXY(int a, int b){
this.x=a;this.y=b;
}
double calculate(){
return (double)x*y;
}
}
// 创建子类 Sub 并重载 calculate 方法
class Sub extends Base{
@Override
double calculate(){
if(y!=0)return (double)x/y;
else return Double.NaN;// 返回 Not-a-Number 表示错误情况
}
}
```
在这个例子中,`Sub.calculate()`改变了原本乘法运算为除法操作,并处理了可能发生的零作为除数的情况[^5]。
阅读全文
相关推荐


















