Java编程:类、对象、继承与多态深度解析
立即解锁
发布时间: 2025-08-19 00:11:24 阅读量: 9 订阅数: 24 


Java编程基础与Android开发入门
### Java编程:类、对象、继承与多态深度解析
#### 1. 类与对象基础
在Java编程中,类是创建对象的模板,对象则是代码和数据的集合。类对现实世界的实体进行抽象概括,而对象是这些实体在应用层面的具体体现。
创建对象时,使用`new`操作符来分配内存,其操作数指定对象的类型。`new`操作符后面紧跟构造函数,构造函数是用于初始化对象的代码块,在分配内存后会立即调用。
Java通过字段来表示实体的状态,字段是在类体内声明的变量。实体的属性通过实例字段描述,同时Java也支持与类相关而非与对象相关的状态,为此提供了类字段。
实体的行为通过方法来表示,方法是在类体内声明的有名称的代码块。实体的行为通过实例方法描述,Java也支持与类相关而非与对象相关的行为,通过类方法来描述。
类和对象在使用前需要正确初始化。类字段在类加载后会初始化为默认的零值,也可以通过类字段初始化器在声明时赋值。实例字段在使用`new`分配对象内存时初始化为默认值,也可以通过实例字段初始化器或构造函数在声明时赋值。此外,Java还支持类初始化器和实例初始化器来完成初始化任务。
对象使用`new`关键字创建,那如何销毁呢?Java没有为开发者提供直接从内存中移除对象的能力,而是通过垃圾回收器来处理。垃圾回收器在后台运行,会定期检查未被引用的对象。
数组可以看作是一种特殊的对象,它有一个只读的`length`字段,表示数组的大小。创建数组时,既可以使用之前介绍的语法糖,也可以使用`new`操作符。
#### 2. 继承与多态概述
Java不仅是基于对象的语言(支持将状态和行为封装在对象中),还是面向对象的语言,因为它支持继承和多态。继承是指一个实体类别从至少一个其他实体类别继承状态和行为的层次关系。从单个类别继承是单继承,从至少两个类别继承是多继承。
Java支持单继承和多继承以促进代码复用。在类的上下文中,通过类扩展实现单继承,这种继承方式被称为实现继承;在接口的上下文中,类通过实现接口或接口通过扩展接口实现单继承和多继承,这种继承方式被称为接口继承。
#### 3. 类的扩展
Java使用`extends`关键字来指定两个类之间的层次关系。例如,有一个`Vehicle`类,想创建一个`Car`类作为`Vehicle`的一种,可以这样实现:
```java
class Vehicle {
// 成员声明
}
class Car extends Vehicle {
// 成员声明
}
```
这种关系被称为“is-a”关系,即汽车是一种车辆。在这种关系中,`Vehicle`是基类、父类或超类,`Car`是派生类、子类。需要注意的是,不能扩展`final`类,如果将`Vehicle`声明为`final`类,尝试扩展它时编译器会报错。
子类不仅可以提供自己的成员声明,还可以继承超类的非私有成员。以下是一个继承成员的示例:
```java
class Vehicle {
private String make;
private String model;
private int year;
Vehicle(String make, String model, int year) {
this.make = make;
this.model = model;
this.year = year;
}
String getMake() {
return make;
}
String getModel() {
return model;
}
int getYear() {
return year;
}
}
public class Car extends Vehicle {
private int numWheels;
Car(String make, String model, int year, int numWheels) {
super(make, model, year);
this.numWheels = numWheels;
}
public static void main(String[] args) {
Car car = new Car("Ford", "Fiesta", 2009, 4);
System.out.println("Make = " + car.getMake());
System.out.println("Model = " + car.getModel());
System.out.println("Year = " + car.getYear());
System.out.println("Number of wheels = " + car.numWheels);
}
}
```
在上述代码中,`Car`类的构造函数使用`super`关键字调用`Vehicle`类的构造函数,`super()`调用只能出现在构造函数中,并且必须是构造函数中的第一条代码。如果没有指定`super()`,而超类又没有无参构造函数,编译器会报错。
#### 4. 方法的重写与重载
子类可以重写(替换)继承的方法,使子类的方法版本被调用。重写的方法必须与被重写的方法具有相同的名称、参数列表和返回类型。例如:
```java
class Vehicle {
private String make;
private String model;
private int year;
Vehicle(String make, String model, int year) {
this.make = make;
this.model = model;
this.year = year;
}
void describe() {
System.out.println(year + " " + make + " " + model);
}
}
public class Car extends Vehicle {
private int numWheels;
Car(String make, String model, int year, int numWheels) {
```
0
0
复制全文
相关推荐










