Класс и объект

JavaBeginner

Введение

В этом лабораторном занятии вы научитесь очень важному программированию паттерну: объектно-ориентированному программированию (object-oriented programming). Вам нужно знать разницу между классом (class) и объектом (object). Проводите больше практических занятий, чтобы лучше понять этот материал.

Класс и объект

Существует множество языков программирования и почти столько же стилей программирования (иногда называемых парадигмами). Программы, которые мы писали до сих пор, были в основном процедурными, так как акцент был сделан на описании вычислительных процедур. Большинство Java-программ являются объектно-ориентированными, что означает, что основной упор делается на объекты и их взаимодействие. Вот некоторые характеристики объектно-ориентированного программирования:

Объекты часто представляют сущности реального мира. Большинство методов - это методы объекта (например, методы, которые вы вызываете для объектов String), а не методы класса (например, методы класса Math). Методы, которые мы писали до сих пор, были методами класса. В этой главе мы напишем несколько методов объекта.

Объекты изолированы друг от друга путем ограничения способов их взаимодействия, особенно путем предотвращения доступа к экземплярным переменным без вызова методов. Классы организованы в иерархические деревья, где новые классы расширяют существующие классы, добавляя новые методы и заменяя другие.

В Java каждый класс расширяет какой-то другой класс, за исключением класса Object. Самым базовым классом является класс Object. Он не содержит экземплярных переменных, но предоставляет методы equals и toString, среди прочих.

Многие классы расширяют Object, в том числе почти все классы, которые мы писали, и многие Java-типы, такие как Integer, Double, String, массивы и т.д. Любой класс, который не явно указывает родительский класс, по умолчанию расширяет Object. "Дерево классов" называется иерархией классов. Класс Object обычно находится на вершине, а все дочерние классы - ниже.

Классы и объекты обычно имеют некоторые атрибуты, которые используются для описания этих классов/объектов, а методы используются для выполнения определенных функций. Здесь мы приведем пример, чтобы показать, как выглядит класс. Сохраните код в файл objectTest.java и запустите его с помощью командной строки.

Пример:

Напишите следующий код в файле /home/labex/project/objectTest.java:

// use keyword 'class' to create a new class named Person
class Person
{
    /*
     * there are four properties,
     * name of string type, age of int type
     * gender of string type, weight of float type
    */
    private String name;
    private int age;
    private String gender;
    private float weight;
    // this is a constructor with no return type, the same name as the class, no parameters
    public Person(){

    }
    //this is a constructor with two parameters
    public Person(String name, int age){
        // use parameters to set object's name and age
        this.name = name;
        this.age = age;
    }
    // this is a constructor with four parameters
    public Person(String name, int age, String gender, float weight){
        // use parameters to set object's name, age, gender and weight
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.weight = weight;
    }
       // this is an object method
    public void personInfo(){
        System.out.println("Name: " + this.name + "\nAge: "+ this.age + "\nGender: " + this.gender + "\nWeight: "+this.weight);
    }
}

public class objectTest{
    public static void main(String[] args){
        // use 'new' to create an instance of class Person
        Person p = new Person("aaa",18,"male",50.5f);  // p refers to  an object
        /* you can try these two different construction methods, and see what the output is.
         * Person p  = new Person();
         * Person p = new Person("aaa",18);
        */
        // use object to invoke method personInfo()
        p.personInfo();
    }
}

Вывод:

Запустите файл objectTest.java с помощью следующих команд:

javac /home/labex/project/objectTest.java
java objectTest

Посмотрите на вывод:

Name: aaa
Age: 18
Gender: male
Weight: 50.5

В классе Person есть четыре атрибута. Все атрибуты являются приватными, поэтому к ним нельзя обратиться извне (они могут использоваться только внутри класса). Есть один метод объекта с именем personInfo, который используется для вывода личной информации, и три конструктора с тем же именем, что и класс Person. Единственное различие между ними - это их параметры. Это поведение называется перегрузкой.

Резюме

Эта часть очень важна. Классы представляют собой абстракцию сущностей с общими характеристиками, а объекты - это сущности с конкретными характеристиками. Вам следует уделить больше времени для понимания вышеупомянутого стиля программирования.