Разница между классами, объектами и экземплярами


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

14 66

14 ответов:

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

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

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

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

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

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

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

это легко понять, если посмотреть на пример. Например, предположим, что у вас есть класс 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, как и во всех объектно-ориентированных языков программирования.

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

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

String word = new String();

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

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

при объявлении объекта класса выделяется память.

Мне нравится объяснение Йеспера в непрофессиональных терминах

импровизируя примеры из ответа Йеспера,

class House {
// blue print for House Objects
}

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

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

myHouse и myCar-это объекты

также является экземпляром дом (относится объект-также в своем классе-дом) в mycar является экземпляром автомобиль

короче

" мой дом-это экземпляр на класс дом", что то же самое, что сказать "мой дом-это объект of тип дом"

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

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

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

  • объект является экземпляром класса и экземпляр означает представителя класса I. E объекта.

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

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

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

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

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

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

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

 Classname var=new Classname();

но например creation он возвращает только указатель, ссылающийся на объект, синтаксис:

 Classname varname;

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

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

для Например,

Class A{

}

A ref = new A();

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

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

Car someCar = new Car();

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

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

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

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

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

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

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

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

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

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

public class Car {

    int currentSpeed;
    String name;

    public void accelerate() {  
    }

    public void park() {
    }

    public void printCurrentSpeed() {
    }
}

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

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

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

класс

  • Он имеет логическое существование, т. е. память выделяется при его создании.

  • Это набор объектов.

  • класс можно рассматривать как схему элементов для создания объектов.

    • Он создается с помощью ключевого слова class

    • класс определяет методы и элементы данных, которыми будут обладать объекты.


объект

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

  • это экземпляр класса.

  • объект-это уникальная сущность, которая содержит элементы данных и функции-члены вместе на языке ООП.

    • Он создается с помощью нового ключевого слова

    • объект задает реализации методов и значения, которыми будут обладать члены данных в классе.

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

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

класс: это "шаблон" / "чертеж", который используется для создания объектов. В основном, класс будет состоять из поля, статического поля, метода, статического метода и конструктора. Поле используется для хранения состояния класса (например: имя объекта 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, но каждый экземпляр представляет другой объект.

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

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

хотя приведенные выше ответы верны, другой способ мышления о классах и объектах будет использовать примеры реального мира: класс с именем Animal может содержать объекты, такие как кошка, собака или рыба. Объект с названием Библии будет классной книгой и т. д. Классы-общие, объекты-специфические. Этот пример мысли помог мне, когда я изучал Java.

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

например:

public class Tweet {

}

Tweet newTweet = new Tweet();

Tweet-это класс, а newTweet-объект класса.