gpt4 book ai didi

java - 对象可以有类中未定义的方法或变量吗?

转载 作者:行者123 更新时间:2023-12-02 04:02:58 25 4
gpt4 key购买 nike

我知道问这个问题很愚蠢,但我想确定一下。在面向对象语言中,是否有任何情况或机会从特定类创建的对象可以拥有该类中未定义的方法或变量?

最佳答案

类中可能存在未直接定义的变量和方法。当您有一个抽象类和一个子类(扩展抽象类的类)时,就会发生这种情况。

在 OOP 方面,这实际上是一种非常常见的方法,可以使代码库具有更好的可重用性。

假设您有一个名为 Vehicle 的抽象类,如下所示:

public abstract class Vehicle {

protected enum Condition {
BAD,
OK,
GOOD
}

private int numOfWheels;
private int numOfSeats;
private boolean isDriving;
private boolean isMotorized;
private Condition condition;

public Vehicle(int numOfWheels,
int numOfSeats,
boolean isDriving,
boolean isMotorized,
Condition condition) {
this.numOfWheels = numOfWheels;
this.numOfSeats = numOfSeats;
this.isDriving = isDriving;
this.isMotorized = isMotorized;
this.condition = condition;
}

protected void repair() {
if(!this.condition.equals(Condition.GOOD)) {
this.condition = Condition.GOOD;
}
}

然后你有一个名为Car的子类,它可能看起来像这样:

public class Car extends Vehicle {
private String brand;
private String model;

public Car(int numOfSeats,
boolean isDriving,
Condition condition,
String brand,
String model) {
super(4, numOfSeats, isDriving, true, condition);
this.brand = brand;
this.model = model;
}

Car 类中的构造函数首先使用给定的参数调用父类中的 super 构造函数,然后为您的 Car 对象设置特定变量。

然后您可以使用如下方式调用您的汽车构造函数:

Car car = new Car(2, false, Vehicle.Condition.BAD, "Mercedes", "AMG");

因此,如果您现在想调用在抽象类 Vehicle 中定义的修复方法,您可以简单地执行以下调用:

car.repair();

我们通过这种架构实现的目标是,每次我们想要创建一个像自行车这样的车辆对象时,我们只需要声明一些特定的变量或方法,就像我们在 Car 类中所做的那样,而不是相同的一遍又一遍。

在更大的项目中,这可以为您节省大量工作并使您的生活更轻松。

希望我的解释能够帮助您理解OOP的原理。

关于java - 对象可以有类中未定义的方法或变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56724992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com