Różnica między klasami, obiektami i instancjami

Co to jest klasa, obiekt i instancja w Javie?

Author: Francesco Menzani, 2009-08-01

14 answers

Java (i każdy inny język programowania) jest modelowany w kategoriach typów i wartości . Na poziomie teoretycznym, wartość jest reprezentacją pewnego kwantu informacji, a typ jest zbiorem wartości. Kiedy mówimy, że wartość X jest instancją Typu Y, mówimy po prostu, że X jest członkiem zbioru wartości, który jest typem Y.

Więc tak naprawdę oznacza termin "instancja": opisuje związek, a nie rzecz.

System typów języka programowania Java obsługuje dwa rodzaje typów, typy prymitywne i typy referencyjne . Typy referencyjne są dalej podzielone na klasy i typy tablic . Obiekt Java jest instancją typu referencyjnego.

Obiekt jest instancją klasy lub tablicą. (JLS 4.3.1)

To jest pogląd teoretyczny typu.

W praktyce większość programistów Java traktuj słowa "instancja" i "obiekt" jako synonimy. (I to dotyczy mnie, a następnie staram się wyjaśnić coś szybko.) I większość programistów używa słowa " wartość "zamiast" instancja " w odniesieniu do instancji prymitywnego typu.

 68
Author: Stephen C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-12 10:37:34

A klasa jest schematem, którego używasz do tworzenia obiektów. Obiekt jest instancją klasy - jest to konkretna "rzecz", którą stworzyłeś używając określonej klasy. Tak więc 'object' i 'instance' to to samo, ale słowo 'instance' wskazuje na związek obiektu z jego klasą.

Jest to łatwe do zrozumienia, jeśli spojrzeć na przykład. Na przykład, załóżmy, że masz klasę House. Twój własny dom jest obiektem i jest instancją klasy House. Twój Dom siostry jest innym obiektem (inną instancją klasy 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();

Klasa House opisuje pojęcie, czym jest dom, a istnieją konkretne, betonowe domy, które są obiektami i instancjami klasy House.

Uwaga: w Javie jest to dokładnie to samo, co we wszystkich obiektowo zorientowanych językach programowania.

 78
Author: Jesper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-28 09:46:38

Klasa jest w zasadzie definicją i zawiera kod obiektu. Obiekt jest instancją klasy

Na przykład, jeśli powiesz

String word = new String();

Klasa jest klasą łańcuchową, która opisuje słowo obiektu (instancji).

Gdy klasa jest zadeklarowana, nie jest przydzielana Żadna pamięć, więc klasa jest tylko szablonem.

Gdy obiekt klasy jest zadeklarowany, przydzielana jest pamięć.

 27
Author: mustafabar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-05 01:19:35

Podoba mi się Wyjaśnienie Jespera w kategoriach laika

Improwizując przykłady z odpowiedzi Jespera,

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 i myCar są obiektami

MyHouse jest instancją House (odnosi obiekt-myHouse do jego klasy-House) myCar jest instancją Samochodu

W skrócie

"myHouse jest instancją z klasy House", co jest tym samym co powiedzenie "myHouse jest obiektem typu House"

 10
Author: user2390183,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-20 21:10:07

Klasa jest typem danych,używasz tego typu do tworzenia obiektu.

  • Instancja jest logiczna, ale obiekt jest fizyczny, zajmuje pewną pamięć.

  • Możemy utworzyć instancję dla klasy abstrakcyjnej, jak również dla interfejsu, ale nie możemy utworzyć
    sprzeciw dla nich.

  • Obiekt jest instancją klasy A instancja oznacza reprezentanta klasy czyli obiektu.

  • Instancja odnosi się do odniesienia do obiektu.

  • Obiekt jest rzeczywiście wskazując na adres pamięci tej instancji.

  • Nie można przekazać instancji nad warstwami, ale można przekazać obiekt nad warstwami

  • Nie można przechowywać instancji, ale można przechowywać obiekt

  • Pojedynczy obiekt może mieć więcej niż jedną instancję.

  • Instancja będzie miała zarówno definicję klasy, jak i definicję obiektu, gdzie podobnie jak w obiekcie będzie miała tylko definicję obiektu.

Składnia Obiekt:

 Classname var=new Classname();

Ale na przykład tworzenie zwraca tylko wskaźnik odnoszący się do obiektu, składnia jest:

 Classname varname;
 6
Author: SwatiKothari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-15 07:39:42

W Javie obiekty są generowane w pamięci sterty. Wymagają one wskazania i użycia w naszej aplikacji. Referencja posiada położenie pamięci obiektu, z którym możemy korzystać z obiektów w naszej aplikacji. W skrócie Referencja to nic innego jak nazwa zmiennej, która przechowuje adres obiektu utworzonego z instancji w Miejscu Pamięci.

An instance jest ogólnym terminem object. Dla twojej wiadomości, Object to klasa.

Na Przykład,

Class A{

}

A ref = new A();

Dla powyższego kodu snippet, ref jest referencją dla obiektu klasy A wygenerowanego na stercie.

 3
Author: Arun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-09 07:09:01

Jeśli masz program, który modeluje samochody, masz klasę do reprezentowania samochodów, więc w kodzie można powiedzieć:

Car someCar = new Car();

SomeCar jest teraz instancją samochodu klasy. Jeśli program jest używany w warsztacie, a someCar reprezentuje twój samochód w ich systemie,to twój samochód jest obiektem.

Więc samochód jest klasą, która może reprezentować każdy prawdziwy samochód someCar jest przykładem klasy samochodów i someCare reprezentuje Jeden prawdziwy obiekt życia (twój samochód)

Jednakże instancja i obiekt jest bardzo często używany zamiennie, jeśli chodzi o omówienie kodowania

 2
Author: Rune FS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-01 14:17:53

Każdy rodzaj danych przechowywanych i przetwarzanych przez komputer jest w jego najbardziej podstawowej reprezentacji wierszem bitów. Sposób interpretacji tych bitów odbywa się za pomocą typów danych. Typy danych mogą być prymitywne lub złożone. Prymitywne typy danych to - na przykład-int lub double. Mają określoną długość i specyficzny sposób interpretacji. W przypadku liczby całkowitej, zwykle pierwszy bit jest używany dla znaku, pozostałe są używane dla wartości.

Złożone typy danych mogą być kombinacjami prymitywne i inne złożone typy danych i nazywane są "klasami" w Javie.

Można zdefiniować złożony typ danych PeopleName składający się z dwóch łańcuchów o nazwie imię i nazwisko. Każdy łańcuch w Javie jest innym złożonym typem danych. Łańcuchy w zamian są (prawdopodobnie) implementowane przy użyciu prymitywnego typu danych char, dla którego Java wie, ile bitów zajmuje do przechowywania i jak je interpretować.

Kiedy tworzysz instancję typu danych, otrzymujesz obiekt i twoje komputery rezerwują trochę pamięci dla niego i zapamiętuje jego lokalizację i nazwę tej instancji. Instancja PeopleName w pamięci zajmie przestrzeń dwóch zmiennych łańcuchowych plus trochę więcej dla księgowości. Liczba całkowita zajmuje 32 bity w Javie.

Złożone typy danych mogą mieć przypisane do nich metody. Metody mogą wykonywać akcje na swoich argumentach lub na instancji typu danych, z którego wywołujesz tę metodę. Jeśli masz dwie instancje o nazwach P1 i p2 i wywołujesz metodę p1.getFirstName(), zwykle zwraca imię pierwszej osoby, ale nie drugiej osoby.

 2
Author: Kage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-28 09:39:03

Koncepcją stojącą za klasami i obiektami jest hermetyzacja logiki w jedną jednostkę programistyczną. Klasy są schematami, z których tworzone są obiekty.

Oto przykład klasy reprezentującej samochód:

public class Car {

    int currentSpeed;
    String name;

    public void accelerate() {  
    }

    public void park() {
    }

    public void printCurrentSpeed() {
    }
}

Możesz utworzyć instancje obiektu samochodu w następujący sposób:

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

Wziąłem przykład z ten tutorial

 2
Author: filip_j,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-15 20:34:04

Klasa

  • Ma logiczne istnienie, tzn. nie jest przydzielana przestrzeń pamięci podczas jej tworzenia.

  • Jest to zbiór obiektów.

  • Klasa może być traktowana jako schemat tworzenia obiektów.

    • Jest on tworzony za pomocą słowa kluczowego klasy

    • Klasa definiuje metody i elementy danych, które będą posiadane przez obiekty.


Obiekt

  • Posiada istnienie fizyczne, tj. miejsce w pamięci jest przydzielane podczas jego tworzenia.

  • Jest to instancja klasy.

  • Obiekt jest unikalną jednostką, która zawiera elementy danych i funkcje Członkowskie razem w języku OOP.

    • Jest on tworzony za pomocą nowego słowa kluczowego

    • Obiekt określa implementacje metod i wartości, które będą posiadane przez elementy danych w klasie.

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-20 16:55:08

Szczerze mówiąc, czuję się bardziej komfortowo z Alfred blog definicje:

Obiekt : obiekty świata rzeczywistego mają dwie główne cechy, stan i zachowanie. Człowiek ma stan (imię, wiek) i zachowanie (bieganie, spanie). Samochód ma stan (aktualna prędkość, obecny bieg) i stan (zastosowanie hamulca, zmiana biegu). Obiekty oprogramowania są koncepcyjnie podobne do obiektów w świecie rzeczywistym: również składają się ze stanu i pokrewnych zachowań. Obiekt przechowuje swój stan w polach i eksponuje swój zachowanie poprzez metody.

Klasa : jest "szablonem" / "blueprint", który jest używany do tworzenia obiektów. Zasadniczo klasa składa się z pola, pola statycznego, metody, metody statycznej i konstruktora. Pole służy do przechowywania stanu klasy (np.: nazwa obiektu studenta). Metoda jest używana do reprezentowania zachowania klasy (np.: jak Uczniowski obiekt stanie). Konstruktor jest używany do tworzenia nowej instancji klasy.

Instancja : instancja jest unikalna Kopia klasy reprezentującej obiekt. Po utworzeniu nowej instancji klasy, JVM przydzieli miejsce pamięci dla tej instancji klasy.

Podany kolejny przykład:

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);
    }
}

Dla Przypadku 1, istnieją dwie instancje klasy Person, ale obie instancje reprezentują ten sam obiekt.

Dla przypadku 2, istnieją dwie instancje klasy Person, ale każda instancja reprezentuje inny obiekt.

Więc Klasa, obiekt i instancja to różne rzeczy. Obiekt i instancja nie są synonimami, jak sugeruje odpowiedź wybrana jako właściwa odpowiedź.

 1
Author: Carlos Casallas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-31 16:42:25

Definicja "obiekt jest instancją klasy", jest koncepcyjnie błędna, ale poprawna zgodnie z implementacją. W rzeczywistości cechy zorientowane obiektowo są wzięte z prawdziwego życia, dla skupienia umysłu programisty z więcej do mniej. W rzeczywistości klasy są przeznaczone do zarządzania obiektem.Na przykład - my ludzie mamy kastę, religię,narodowość i wiele więcej. Te odlewy, religia, narodowość są klasami i nie istnieją bez ludzi. Ale w realizacji nie ma istnienie obiektów bez klas. Obiekt - obiekt jest dyskretnym bytem posiadającym pewien dobrze zdefiniowany atrybut. Tutaj dyskretny oznacza coś, co czyni go wyjątkowym od innych. Dobrze zdefiniowany atrybut ma sens w pewnym kontekście. Klasa-Klasyfikacja obiektu o pewnym powszechnym zachowaniu lub obiektów pewnego powszechnego typu.

 -1
Author: Gaurav Kathuria,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-10 06:35:31

Podczas gdy powyższe odpowiedzi są poprawne, innym sposobem myślenia o klasach i obiektach byłoby użycie rzeczywistych przykładów: Klasa o nazwie zwierzę może zawierać przedmioty takie jak kot, pies lub ryba. Przedmiot z tytułem Biblii byłby księgą klasową itp. Klasy są ogólne, obiekty są specyficzne. Ten przykład myślowy pomógł mi, gdy uczyłem się Javy.

 -1
Author: kurdtpage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-02 21:35:26

Klasa jest szablonem lub typem. Obiekt jest instancją klasy.

Na przykład:

public class Tweet {

}

Tweet newTweet = new Tweet();

Tweet jest klasą, A newTweet jest obiektem klasy.

 -2
Author: Gagan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-04 11:54:21