Разница между классами, объектами и экземплярами - PullRequest
74 голосов
/ 01 августа 2009

Что такое класс, объект и экземпляр в Java?

Ответы [ 16 ]

85 голосов
/ 28 сентября 2009

A class - это чертеж, который вы используете для создания объектов . Объект - это экземпляр класса - это конкретная «вещь», которую вы создали, используя определенный класс. Таким образом, «объект» и «экземпляр» - это одно и то же, но слово «экземпляр» указывает на отношение объекта к его классу.

Это легко понять, если вы посмотрите на пример. Например, предположим, у вас есть класс House. Ваш собственный дом является объектом и является экземпляром класса House. Дом вашей сестры - это еще один объект (еще один экземпляр класса House).

// Class House describes what a house is
class House {
    // ...
}

// You can use class House to create objects (instances of class House)
House myHouse = new House();
House sistersHouse = new House();

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

Примечание: это точно так же в Java, как и во всех объектно-ориентированных языках программирования.

74 голосов
/ 01 августа 2009

Java (и любой другой язык программирования) моделируется в терминах типов и значений . На теоретическом уровне значение является представлением некоторого кванта информации, а тип представляет собой набор значений. Когда мы говорим, что значение X является экземпляром типа Y, мы просто говорим, что X является членом набора значений типа Y.

Так вот, что на самом деле означает термин «экземпляр»: он описывает отношения, а не вещь.

Система типов языка программирования Java поддерживает два типа типов: примитивные типы и ссылочные типы . Типы ссылок далее подразделяются на классы и типы массивов . Java объект является экземпляром ссылочного типа.

Объект является экземпляром класса или массивом. ( JLS 4.3.1 )

Это теоретическое представление типа.

На практике большинство разработчиков Java трактуют слова «экземпляр» и «объект» как синонимы. (И это касается меня, тогда я пытаюсь что-то объяснить быстро.) И большинство разработчиков используют слово «значение», а не «экземпляр» для ссылки на экземпляр примитивного типа.

29 голосов
/ 01 августа 2009

Класс в основном является определением и содержит код объекта. Объект является экземпляром класса

например, если вы говорите

String word = new String();

класс - это класс String, который описывает слово объекта (экземпляра).

Когда класс объявляется, память не выделяется, поэтому класс является просто шаблоном.

Когда объект класса объявлен, память выделяется.

11 голосов
/ 21 октября 2013

Мне нравится объяснение Джеспера в терминах непрофессионала

Импровизируя примеры из ответа Джеспера,

class House {
// blue print for House Objects
}

class Car {
// blue print for Instances of Class Car 
}

House myHouse = new House();
Car myCar = new Car();

myHouse и myCar являются объектами

myHouse является экземпляром House (относит Object-myHouse к своему Class-House) myCar это экземпляр автомобиля

короче

«myHouse - это экземпляр из класса House», что означает «myHouse - это объект из типа House»

6 голосов
/ 12 апреля 2013

Класс - это тип данных. Этот тип используется для создания объекта.

  • Экземпляр логичен, но объект - физическое средство занимает некоторую память.

  • Мы можем создать экземпляр как для абстрактного класса, так и для интерфейса, но мы не можем создать
    объект для тех.

  • Объект является экземпляром класса, а экземпляр означает представитель класса i.e объекта.

  • Экземпляр относится к ссылке на объект.

  • Объект фактически указывает на адрес памяти этого экземпляра.

  • Вы не можете передать экземпляр по слоям, но вы можете передать объект по слоям

  • Вы не можете сохранить экземпляр, но вы можете сохранить объект

  • Один объект может иметь более одного экземпляра.

  • Экземпляр будет иметь как определение класса, так и определение объекта, где, как в объекте, он будет иметь только определение объекта.

Синтаксис объекта:

 Classname var=new Classname();

Но для создания экземпляра он возвращает только указатель на объект, синтаксис:

 Classname varname;
3 голосов
/ 09 июля 2013

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

instance - это общий термин для object. К вашему сведению, Object это класс.

Например,

Class A{

}

A ref = new A();

В приведенном выше фрагменте кода ссылка является ссылкой на объект класса A, созданный в куче.

2 голосов
/ 31 января 2018

Честно говоря, я чувствую себя более комфортно с Альфред блог определения:

Объект : объекты реального мира имеют две основные характеристики: состояние и поведение. У человека есть состояние (имя, возраст) и поведение (бег, сон). Автомобиль имеет состояние (текущая скорость, текущая передача) и поведение (включение тормоза, переключение передач). Программные объекты концептуально похожи на объекты реального мира: они также состоят из состояния и связанного поведения. Объект сохраняет свое состояние в полях и раскрывает свое поведение с помощью методов.

Класс : это «шаблон» / «план», который используется для создания объектов. По сути, класс будет состоять из поля, статического поля, метода, статического метода и конструктора. Поле используется для хранения состояния класса (например: имя объекта Student). Метод используется для представления поведения класса (например, как объект ученика собирается встать). Конструктор используется для создания нового экземпляра класса.

Экземпляр : Экземпляр - это уникальная копия класса, представляющая объект. Когда создается новый экземпляр класса, JVM выделяет пространство памяти для этого экземпляра класса.

Учитывая следующий пример:

public class Person {
    private int id;
    private String name;
    private int age;

    public Person (int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + id;
        return result;
    }

    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (id != other.id)
            return false;
        return true;
    }

    public static void main(String[] args) {
        //case 1
        Person p1 = new Person(1, "Carlos", 20);
        Person p2 = new Person(1, "Carlos", 20);

        //case 2
        Person p3 = new Person(2, "John", 15);
        Person p4 = new Person(3, "Mary", 17);
    }
}

Для случая 1 есть два экземпляра класса Person, но оба экземпляра представляют один и тот же объект.

Для случая 2 существует два экземпляра класса Person, но каждый экземпляр представляет отдельный объект.

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

2 голосов
/ 15 ноября 2014

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

Вот пример класса, представляющего Автомобиль:

public class Car {

    int currentSpeed;
    String name;

    public void accelerate() {  
    }

    public void park() {
    }

    public void printCurrentSpeed() {
    }
}

Вы можете создать экземпляров объекта Автомобиль следующим образом:

Car audi = new Car();
Car toyota = new Car();

Я взял пример из этого урока

2 голосов
/ 28 сентября 2009

Любой тип данных, которые ваш компьютер хранит и обрабатывает, в самом простом представлении - это ряд битов. Способ интерпретации этих битов осуществляется с помощью типов данных. Типы данных могут быть примитивными или сложными. Примитивные типы данных, например, int или double. Они имеют конкретную длину и особый способ интерпретации. В случае целого числа обычно первый бит используется для знака, остальные используются для значения.

Сложные типы данных могут быть комбинациями примитивных и других сложных типов данных и называются "Класс" в Java.

Вы можете определить сложный тип данных PeopleName, состоящий из двух строк, называемых имя и фамилия. Каждая строка в Java - это другой сложный тип данных. Возвращаемые строки (вероятно) реализованы с использованием примитивного типа данных char, для которого Java знает, сколько битов они принимают для хранения и как их интерпретировать.

Когда вы создаете экземпляр типа данных, вы получаете объект, и ваши компьютеры резервируют для него некоторую память и запоминают его местоположение и имя этого экземпляра. Экземпляр PeopleName в памяти займет место двух переменных String, а также немного больше для учета. Целое число занимает в Java 32 бита.

Для сложных типов данных могут быть назначены методы. Методы могут выполнять действия со своими аргументами или с экземпляром типа данных, из которого вы вызываете этот метод. Если у вас есть два экземпляра PeopleName с именами p1 и p2 и вы вызываете метод p1.getFirstName (), он обычно возвращает имя первого лица, но не имя второго.

2 голосов
/ 01 августа 2009

Если у вас есть программа, которая моделирует автомобили, у вас есть класс для представления автомобилей, поэтому в коде вы могли бы сказать:

Car someCar = new Car();

someCar теперь является экземпляром класса Car. Если программа используется в ремонтной мастерской, а someCar представляет ваш автомобиль в их системе, тогда ваш автомобиль является объектом.

Итак, Car - это класс, который может представлять любой автомобиль реального мира. SomeCar является экземпляром класса Car и someCare представляет один реальный объект (ваш автомобиль)

однако экземпляр и объект очень часто используются взаимозаменяемо при обсуждении кодирования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...