【问题标题】:How can i understand it java classes and objects better?我怎样才能更好地理解它的 java 类和对象?
【发布时间】:2016-12-16 14:12:14
【问题描述】:

我很难更好地理解类和对象。我一直在寻找阅读内容或观看新视频,以防有人解释得更好。

例如,我想造一辆汽车。所以我制作了一辆类(蓝图)汽车。

public class Car{



}

我的车想成为宝马,所以接下来我需要创建一个对象?

Car bmw = new Car();

我知道(也许)有很多种汽车,所以我需要一类汽车,然后我会用不同类型的汽车创建新对象?宝马、法拉利等

但我不明白类实例的含义?这是什么意思?这条线会发生什么?

Car bmw = new Car();

不同类型的汽车如何具有不同的属性? 方法(动作)都是一样的,比如开车、停车、转弯。

关于构造函数,当我创建构造函数时,这个构造函数会与创建的所有对象相同吗?

【问题讨论】:

  • 阅读继承。如果你想让bmw 有新的属性,创建一个新的Bmw 类...class BMW extends Car { }
  • 也许this 可以帮助你更好地理解OOP。

标签: java class oop object


【解决方案1】:

您可以在网上找到数以百万计的有关面向对象编程的教程,而关于 SO 的回答是一个相当长的话题。我会试着对你的例子说几句话。

考虑一个类,比如变量的“自定义类型”,比如intdouble。您可以通过编写类定义(您称之为“蓝图”)来定义汽车是什么。 这个定义基本上包含两件事:

  • 汽车属性,如颜色、座位数等
  • 汽车方法,它们基​​本上是与任何汽车“生活”并在汽车的每个实例上运行的函数

在您的示例中,这是汽车定义

public class Car {

}

有了这个,您刚刚定义了“类型”Car,它没有任何属性或方法。为了这个例子,让我们添加一些东西:

public class Car {
    private String color;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

这显然非常简单。我不会重复我在这里使用的关键字publicprivate。为此,请阅读 encapsulation(无论如何这都是 OOP 的一个重要方面)

现在我们有了一个 Car “类型”,它有一个 color 属性和一个 getColor() 方法。请注意,getColor() 是一个可以访问 Car 属性的函数。

一旦你定义这个类,你的代码中仍然没有实际的汽车“对象”(或变量)。与任何其他类型一样,您必须在代码中创建一些汽车实例,并将该实例分配给一个变量以使用您刚刚给出的定义。

您可以使用 new 运算符来执行此操作。在您的示例中,

Car myCar = new Car();

创建一个新变量myCar,它包含对汽车实例的引用。同样,这里发生了很多事情,阅读 Java 中的 OOP 以了解构造函数。如果您对 C/C++ 有所了解,也许您也可以阅读有关指针、引用和动态内存的内容,否则这些内容留待以后再说。

上面的行没有进入类定义(无论如何都不是典型的),它将成为您的主要功能的一部分。

现在你可以做这样的事情(仍然在你的主要):

myCar.setColor("Red");
String color = myCar.getColor();

System.out.println("the color of my car is: " + color);
// the output on the console will be:
// the color of my car is: Red

我们所做的是通过 Carinstance(分配给 myCar变量)的 @ 设置颜色 property 987654338@ 方法,然后使用另一个getColor() 方法取回。

要了解实例的重要性,请尝试以下操作:

Car myCar1 = new Car();
Car myCar2 = new Car();

myCar1.setColor("Red");
myCar2.setColor("White");

System.out.println("color of the car 1: " + myCar1.getColor());
System.out.println("color of the car 2: " + myCar2.getColor());

输出将是:

color of the car 1: Red
color of the car 2: White

这强调了您创建了Car“类型”的 2 个不同实例,它们具有相同的属性和方法(来自这里的“蓝图”术语),但是这两个实例彼此独立地“生活”。

最后,class 为您提供了一种构建复杂对象并定义允许其余代码对它们执行的操作(方法)的方法(这也称为接口)。对于这样一个小例子,这可能看起来工作量太大,但在复杂的程序中,这是一件非常非常非常好事情

我会在这里停下来,希望这能让您更好地了解什么是类。继续学习,最重要的是,练习和试验。用起来会越来越清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多