ความแตกต่างระหว่างคลาสออบเจ็กต์และอินสแตนซ์


คำตอบ:


89

Java (และการเขียนโปรแกรมภาษาอื่น ๆ ) เป็นแบบจำลองในแง่ของประเภทและค่า ในระดับทฤษฎีค่าคือการแสดงข้อมูลควอนตัมบางส่วนและประเภทคือชุดของค่า เมื่อเราพูดว่าค่า X เป็นอินสแตนซ์ของประเภท Y เราพูดง่ายๆว่า X เป็นสมาชิกของชุดค่าที่เป็นประเภท Y

นั่นคือความหมายจริงๆของคำว่า "อินสแตนซ์" มันอธิบายถึงความสัมพันธ์ไม่ใช่สิ่ง

ระบบประเภทของการเขียนโปรแกรมภาษา Java สนับสนุนสองชนิดของประเภทชนิดดั้งเดิมและประเภทของการอ้างอิง ประเภทการอ้างอิงจะแบ่งออกเป็นคลาสและประเภทอาร์เรย์เพิ่มเติม ออบเจ็กต์ Java เป็นอินสแตนซ์ของประเภทการอ้างอิง

ออบเจ็กต์คืออินสแตนซ์คลาสหรืออาร์เรย์ ( JLS 4.3.1 )

นั่นคือมุมมองแบบทฤษฎี

ในทางปฏิบัตินักพัฒนา Java ส่วนใหญ่ถือว่าคำว่า "instance" และ "object" เป็นคำพ้องความหมาย (และนั่นรวมถึงตัวฉันด้วยฉันกำลังพยายามอธิบายบางอย่างอย่างรวดเร็ว) และนักพัฒนาส่วนใหญ่ใช้คำว่า "ค่า" แทนที่จะเป็น "อินสแตนซ์" เพื่ออ้างถึงอินสแตนซ์ของประเภทดั้งเดิม


3
ฉันขอขอบคุณคำตอบของคุณมากและฉันเกือบจะเข้าใจแล้วมีเพียงคำถามเดียว เราพูดว่า - "เมื่อใดก็ตามที่คอมไพลเลอร์พบตัวสร้างอาร์กิวเมนต์ 0 มันจะสร้างอินสแตนซ์ของคลาส" ในบริบทนี้อินสแตนซ์หรือออบเจ็กต์ถูกสร้างขึ้นจริงๆ ฉันเดาว่าวัตถุและเราใช้คำว่า "อินสแตนซ์" เป็นคำพ้องความหมาย แต่มันจะดีกว่านี้ถ้าคุณยืนยันได้ดีกว่า
Pranjut

3
@Ryan: โดยทั่วไปใช่มันกำลังสร้าง Object ซึ่งเป็นตัวอย่างของ Class ที่เป็นปัญหา (แต่โปรดทราบว่าประโยคที่ยกมานั้นพูดว่า "อินสแตนซ์ของคลาส" แทนที่จะเป็น "อินสแตนซ์" ... ดังนั้นผู้เขียนจึงไม่ได้ใช้ "อินสแตนซ์" เป็นคำพ้องความหมายที่นี่)
Stephen C

1
@RuneFS - "การสร้างแบบจำลอง" ที่ฉันพูดถึงไม่ได้เกี่ยวกับการเป็นตัวแทน มันเป็นทางทฤษฎี แท้จริงแล้วในบางภาษามีออบเจ็กต์ที่แสดงถึงประเภทหรือแม้กระทั่งที่ช่วยให้คุณสามารถระบุอินสแตนซ์ทั้งหมดของประเภทได้ แต่คุณสมบัติเหล่านั้นช่วยเพิ่ม "การสร้างแบบจำลอง" ทั่วไปแทนที่จะทำให้เป็นโมฆะ
Stephen C

1
@RuneFS - ไม่ ... ผมพูดถึง "ทฤษฎีประเภท" มันเป็นสาขาหนึ่งของคณิตศาสตร์ เป็นอิสระจากเทคโนโลยีที่ใช้ในการรันโปรแกรม ทฤษฎีประเภทที่ใกล้เคียงที่สุดในการคำนวณคือแคลคูลัสแลมบ์ดา (หากคุณสนใจลองรับสำเนา "ประเภทและภาษาโปรแกรม" โดย Benjamin C. Pierce)
Stephen C

1
user2390183คุณกำลังทำผิดพลาดเช่นเดียวกับ คุณกำลังปฏิบัติต่อตัวแปรเป็น "ชื่อ" พวกเขาจะไม่. ตัวแปรคือ "ตัวยึดอ้างอิง" ที่มีการอ้างอิงถึงวัตถุ ออบเจ็กต์ไม่มีชื่อที่แท้จริง การอ้างอิงเป็นสิ่งที่ใกล้เคียงที่สุดกับ "ชื่อ" สำหรับวัตถุยกเว้นว่าไม่มีการแทนค่าคงที่ (GC สามารถย้ายวัตถุซึ่งเปลี่ยนรูปแบบบิตที่ใช้แสดงการอ้างอิง)
Stephen C

99

ระดับเป็นพิมพ์เขียวที่คุณใช้ในการสร้างวัตถุ วัตถุคืออินสแตนซ์ของคลาสซึ่งเป็น 'สิ่งของ' ที่เป็นรูปธรรมที่คุณสร้างขึ้นโดยใช้คลาสเฉพาะ ดังนั้น 'วัตถุ' และ 'อินสแตนซ์' จึงเป็นสิ่งเดียวกัน แต่คำว่า 'อินสแตนซ์' บ่งบอกถึงความสัมพันธ์ของวัตถุกับคลาสของมัน

นี่เป็นเรื่องง่ายที่จะเข้าใจหากคุณดูตัวอย่าง 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();

ชั้นอธิบายแนวคิดของสิ่งที่บ้านเป็นและมีเฉพาะบ้านคอนกรีตซึ่งเป็นวัตถุและอินสแตนซ์ของคลาสHouseHouse

หมายเหตุ: สิ่งนี้เหมือนกับใน Java ทุกประการกับภาษาการเขียนโปรแกรมเชิงวัตถุทั้งหมด


class House { // blue print for House Objects } class Car { // blue print for Instances of Class Car } House myHouse = House new(); Car myCar = Car new();
Suraj Jain

myHouse และ myCar เป็นวัตถุ myHouse เป็นตัวอย่างของ House (เกี่ยวข้องกับ Object-myHouse กับ Class-House) myCar เป็นตัวอย่างของรถยนต์ เป็นความจริงโปรดดูคำตอบด้านบนโดย user2390183 ว่าถูกต้องหรือไม่?
Suraj Jain

30

คลาสเป็นคำจำกัดความและมีรหัสของออบเจ็กต์ วัตถุคือตัวอย่างของการเรียน

เช่นถ้าคุณพูด

String word = new String();

คลาสคือคลาส String ซึ่งอธิบายถึงอ็อบเจ็กต์ (อินสแตนซ์) คำ

เมื่อมีการประกาศคลาสจะไม่มีการจัดสรรหน่วยความจำดังนั้นคลาสจึงเป็นเพียงเทมเพลต

เมื่อมีการประกาศอ็อบเจ็กต์ของคลาสหน่วยความจำจะถูกจัดสรร


คุณหมายความว่าออบเจ็กต์และอินสแตนซ์เหมือนกันหรือไม่?
Pranjut

ขอบคุณดาวิดสำหรับลิงค์ จากหัวข้อที่ฉันได้รับนี้ทุกสิ่งในโลกแห่งความจริงที่มีสถานะและพฤติกรรมสามารถเรียกได้ว่าเป็น "วัตถุ" และในการจัดประเภทวัตถุเหล่านี้เราใช้คลาส (คลาส A คือพิมพ์เขียวที่สร้างวัตถุแต่ละชิ้น) และมันบอกว่าออบเจ็กต์ของคลาสคืออินสแตนซ์ ตอนนี้มีใครช่วยบอกฉันหน่อยว่าความแตกต่างระหว่างออบเจ็กต์และอินสแตนซ์คืออะไรหมายความว่าอ็อบเจ็กต์ไม่มีอยู่จริงในบริบทของการเขียนโปรแกรมและอินสแตนซ์แสดงถึงวัตถุในนั้นหรือไม่?
Pranjut

@ มุสตาฟา: ฉันขอโทษที่ขัดแย้งกับคุณ แต่ตาม JLS อาร์เรย์ก็เป็นวัตถุใน Java เช่นกัน และคุณจะพบว่า JLS ไม่ได้กำหนดคำว่า 'อินสแตนซ์' เลย ดูคำตอบของฉัน
Stephen C

@Ryan: ดูคำตอบของฉันสำหรับความแตกต่างระหว่าง "อินสแตนซ์" และ "วัตถุ" คำตอบและความคิดเห็นของมุสตาฟา (IMO) ทำให้เข้าใจผิด
Stephen C

@mustafabar - "เมื่อมีการประกาศคลาสจะไม่มีการจัดสรรหน่วยความจำดังนั้นคลาสจึงเป็นเพียงเทมเพลต" - และนี่ก็ไม่เป็นความจริงเช่นกัน หน่วยความจำถูกจัดสรรให้กับ (อย่างน้อย) แทนstaticตัวแปรของคลาส (และสำหรับสิ่งอื่น ๆ ด้วยที่เกี่ยวข้องกับตัวตนประเภทของคลาสด้วย)
Stephen C

13

ฉันชอบคำอธิบายของเจสเปอร์ในแง่คนธรรมดา

โดยการยกตัวอย่างที่ไม่เหมาะสมจากคำตอบของเจสเปอร์

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 เป็นตัวอย่างของClass House" ซึ่งเหมือนกับการพูดว่า "myHouse is an Object of type House"


6

คลาสคือประเภทข้อมูลคุณใช้ประเภทนี้เพื่อสร้างวัตถุ

  • อินสแตนซ์เป็นตรรกะ แต่อ็อบเจ็กต์คือฟิสิคัลหมายถึงครอบครองหน่วยความจำบางส่วน

  • เราสามารถสร้างอินสแตนซ์สำหรับคลาสนามธรรมเช่นเดียวกับอินเทอร์เฟซ แต่เราไม่สามารถสร้าง
    อ็อบเจกต์สำหรับสิ่งเหล่านั้นได้

  • ออบเจ็กต์คืออินสแตนซ์ของคลาสและอินสแตนซ์หมายถึงตัวแทนของคลาสเช่นอ็อบเจ็กต์

  • อินสแตนซ์หมายถึงการอ้างอิงของวัตถุ

  • ออบเจ็กต์ชี้ไปที่ที่อยู่หน่วยความจำของอินสแตนซ์นั้นจริงๆ

  • คุณไม่สามารถส่งผ่านอินสแตนซ์ข้ามเลเยอร์ได้ แต่คุณสามารถส่งผ่านวัตถุข้ามเลเยอร์ได้

  • คุณไม่สามารถจัดเก็บอินสแตนซ์ได้ แต่คุณสามารถจัดเก็บวัตถุได้

  • วัตถุเดียวสามารถมีได้มากกว่าหนึ่งอินสแตนซ์

  • อินสแตนซ์จะมีทั้งนิยามคลาสและนิยามอ็อบเจ็กต์โดยที่ในอ็อบเจ็กต์จะมีเฉพาะนิยามอ็อบเจ็กต์

ไวยากรณ์ของวัตถุ:

 Classname var=new Classname();

แต่สำหรับการสร้างอินสแตนซ์จะส่งกลับเพียงตัวชี้ที่อ้างถึงวัตถุไวยากรณ์คือ:

 Classname varname;

3

ใน java วัตถุจะถูกสร้างบนหน่วยความจำฮีป สิ่งเหล่านี้ต้องการการอ้างอิงเพื่อชี้และใช้ในแอปพลิเคชันของเรา การอ้างอิงมีตำแหน่งหน่วยความจำของวัตถุซึ่งเราสามารถใช้วัตถุในแอปพลิเคชันของเราได้ การอ้างอิงโดยย่อคือชื่อของตัวแปรที่เก็บที่อยู่ของอ็อบเจ็กต์ที่สร้างอินสแตนซ์บนตำแหน่งหน่วยความจำ

เป็นคำทั่วไปสำหรับinstance objectFYI Objectเป็นคลาส

ตัวอย่างเช่น,

Class A{

}

A ref = new A();

สำหรับข้อมูลโค้ดด้านบน ref คือการอ้างอิงสำหรับอ็อบเจ็กต์ของคลาส A ที่สร้างบนฮีป


3

สุจริตฉันรู้สึกสบายใจมากขึ้นกับคำจำกัดความของบล็อกอัลเฟรด :

วัตถุ : วัตถุในโลกแห่งความจริงมี 2 ลักษณะสำคัญสถานะและพฤติกรรม มนุษย์มีสถานะ (ชื่ออายุ) และพฤติกรรม (วิ่งนอนหลับ) รถมีสถานะ (ความเร็วปัจจุบันเกียร์ปัจจุบัน) และพฤติกรรม (ใช้เบรคเปลี่ยนเกียร์) วัตถุซอฟต์แวร์มีแนวความคิดคล้ายกับวัตถุในโลกแห่งความจริง: วัตถุเหล่านี้ประกอบด้วยสถานะและพฤติกรรมที่เกี่ยวข้องเช่นกัน อ็อบเจ็กต์เก็บสถานะในฟิลด์และเปิดเผยพฤติกรรมของมันผ่านวิธีการ

คลาส : คือ "เทมเพลต" / "พิมพ์เขียว" ที่ใช้ในการสร้างวัตถุ โดยทั่วไปคลาสจะประกอบด้วยฟิลด์ฟิลด์สแตติกเมธอดวิธีการคงที่และคอนสตรัคเตอร์ ฟิลด์ใช้เพื่อเก็บสถานะของคลาส (เช่น: name of Student object) Method ใช้เพื่อแสดงพฤติกรรมของคลาส (เช่น: Student object จะยืนขึ้นได้อย่างไร) Constructor ใช้เพื่อสร้างอินสแตนซ์ใหม่ของคลาส

อินสแตนซ์ : อินสแตนซ์คือสำเนาเฉพาะของคลาสที่แสดงถึงออบเจ็กต์ เมื่อสร้างอินสแตนซ์ใหม่ของคลาส 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 มีสองอินสแตนซ์ของคลาสบุคคล แต่แต่ละอินสแตนซ์แสดงถึงออบเจ็กต์ที่แตกต่างกัน

คลาสวัตถุและอินสแตนซ์จึงเป็นคนละสิ่งกัน วัตถุและอินสแตนซ์ไม่ใช่คำพ้องความหมายตามที่แนะนำในคำตอบที่เลือกเป็นคำตอบที่ถูกต้อง


2

หากคุณมีโปรแกรมที่สร้างโมเดลรถยนต์คุณมีคลาสสำหรับแสดงรถยนต์ดังนั้นใน Code คุณสามารถพูดได้ว่า:

Car someCar = new Car();

someCar ตอนนี้เป็นตัวอย่างของรถคลาส หากโปรแกรมถูกใช้ที่ร้านซ่อมและ someCar แสดงถึงรถของคุณในระบบของพวกเขาแสดงว่ารถของคุณเป็นวัตถุ

ดังนั้นรถยนต์เป็นชั้นที่สามารถเป็นตัวแทนใด ๆ someCar โลกรถยนต์จริงเป็นตัวอย่างของการเรียนรถยนต์และ someCare หมายถึงหนึ่งวัตถุชีวิตจริง (รถของคุณ)

อย่างไรก็ตามอินสแตนซ์และอ็อบเจ็กต์มักใช้แทนกันได้เมื่อพูดถึงการเข้ารหัส


1
การพูดอย่างเคร่งครัดsomeCarคือการอ้างอิงถึงอินสแตนซ์รถยนต์ อินสแตนซ์เองไม่มีชื่อ
Joachim Sauer

2

ข้อมูลประเภทใด ๆ ที่คอมพิวเตอร์ของคุณจัดเก็บและประมวลผลอยู่ในการแสดงข้อมูลพื้นฐานที่สุดในแถวของบิต วิธีตีความบิตเหล่านั้นทำผ่านชนิดข้อมูล ชนิดข้อมูลอาจเป็นแบบดั้งเดิมหรือซับซ้อน ประเภทข้อมูลดั้งเดิม ได้แก่ - เช่น int หรือ double พวกเขามีความยาวที่เฉพาะเจาะจงและวิธีการตีความเฉพาะ ในกรณีของจำนวนเต็มโดยปกติบิตแรกจะใช้สำหรับเครื่องหมายส่วนอื่น ๆ จะใช้สำหรับค่า

ประเภทข้อมูลที่ซับซ้อนสามารถรวมกันของชนิดข้อมูลดั้งเดิมและชนิดข้อมูลที่ซับซ้อนอื่น ๆ และเรียกว่า "คลาส" ใน Java

คุณสามารถกำหนดประเภทข้อมูลที่ซับซ้อน PeopleName ซึ่งประกอบด้วยสองสตริงที่เรียกว่าชื่อและนามสกุล แต่ละ String ใน Java เป็นข้อมูลประเภทอื่นที่ซับซ้อน สตริงในทางกลับกัน (อาจ) นำไปใช้โดยใช้ถ่านชนิดข้อมูลดั้งเดิมซึ่ง Java รู้จำนวนบิตที่ใช้ในการจัดเก็บและวิธีการตีความ

เมื่อคุณสร้างอินสแตนซ์ของชนิดข้อมูลคุณจะได้รับอ็อบเจ็กต์และคอมพิวเตอร์ของคุณสงวนหน่วยความจำไว้และจดจำตำแหน่งและชื่อของอินสแตนซ์นั้น อินสแตนซ์ของ PeopleName ในหน่วยความจำจะใช้พื้นที่ของตัวแปร String สองตัวบวกอีกเล็กน้อยสำหรับการทำบัญชี จำนวนเต็มใช้เวลาถึง 32 บิตใน Java

ชนิดข้อมูลที่ซับซ้อนอาจมีวิธีการที่กำหนดให้ เมธอดสามารถดำเนินการกับอาร์กิวเมนต์หรือบนอินสแตนซ์ของชนิดข้อมูลที่คุณเรียกใช้เมธอดนี้ หากคุณมี PeopleName สองอินสแตนซ์ที่เรียกว่า p1 และ p2 และคุณเรียกเมธอด p1.getFirstName () โดยปกติจะส่งคืนชื่อของบุคคลแรก แต่ไม่ใช่ของบุคคลที่สอง


2

แนวคิดเบื้องหลังคลาสและอ็อบเจ็กต์คือการห่อหุ้มลอจิกไว้ในหน่วยการเขียนโปรแกรมเดียว คลาสคือพิมพ์เขียวของวัตถุที่สร้างขึ้น

นี่คือตัวอย่างของคลาสที่แสดงถึงรถยนต์:

public class Car {

    int currentSpeed;
    String name;

    public void accelerate() {  
    }

    public void park() {
    }

    public void printCurrentSpeed() {
    }
}

คุณสามารถสร้างอินสแตนซ์ของObject Car ได้ดังนี้:

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

ฉันได้นำตัวอย่างจากบทช่วยสอนนี้


2

ชั้น : โครงสร้าง

วัตถุ : การสำแดงทางกายภาพ

อินสแตนซ์ : แต่ละออบเจ็กต์ที่สร้างจากคลาส

อ้างอิง : ที่อยู่ของวัตถุ


1

คลาส

  • มีการดำรงอยู่เชิงตรรกะกล่าวคือไม่มีการจัดสรรพื้นที่หน่วยความจำเมื่อสร้างขึ้น

  • มันคือชุดของวัตถุ

  • คลาสอาจถือได้ว่าเป็นพิมพ์เขียวในการสร้างวัตถุ

    • มันถูกสร้างขึ้นโดยใช้คีย์เวิร์ดระดับ

    • คลาสกำหนดวิธีการและสมาชิกข้อมูลที่จะถูกครอบครองโดย Objects


วัตถุ

  • มีการดำรงอยู่ทางกายภาพกล่าวคือพื้นที่หน่วยความจำจะถูกจัดสรรเมื่อถูกสร้างขึ้น

  • มันเป็นตัวอย่างของคลาส

  • ออบเจ็กต์เป็นเอนทิตีเฉพาะซึ่งประกอบด้วยสมาชิกข้อมูลและฟังก์ชันสมาชิกร่วมกันในภาษา OOP

    • สร้างขึ้นโดยใช้คำหลักใหม่

    • ออบเจ็กต์ระบุการนำเมธอดไปใช้และค่าที่สมาชิกข้อมูลในคลาสจะถูกครอบครอง


1
พื้นที่ว่างอาจได้รับการจัดสรรเมื่อ "สร้าง" ชั้นเรียน พื้นที่จำเป็นสำหรับตัวแปรคงที่กำหนดโดยคลาส (และ "ตรรกะ" กับ "ทางกายภาพ" กำลังยืดออกเนื่องจากการแสดงวัตถุเป็นเพียงรูปแบบบิตช่วยในอุปกรณ์หน่วยความจำบางอย่าง)
Stephen C

@StephenC แล้วความแตกต่างอื่น ๆ จะเป็นอย่างไร?

ดูคำตอบของฉัน คำถามนี้ไม่สามารถตอบได้อย่างถูกต้องเพียงแค่พูดถึงความแตกต่าง
Stephen C

0

คลาสคือพิมพ์เขียวที่จำเป็นในการสร้างวัตถุ (= อินสแตนซ์)

ความแตกต่างระหว่างวัตถุและอินสแตนซ์คือวัตถุคือสิ่งของและอินสแตนซ์เป็นความสัมพันธ์

กล่าวอีกนัยหนึ่งอินสแตนซ์อธิบายความสัมพันธ์ของวัตถุกับคลาสที่วัตถุนั้นสร้างขึ้น


-1

คำจำกัดความ "Object is an instance of a class" ผิดแนวคิด แต่ถูกต้องตามการนำไปใช้งาน จริงๆแล้วคุณสมบัติเชิงวัตถุนั้นนำมาจากชีวิตจริงเพื่อมุ่งเน้นความคิดของโปรแกรมเมอร์จากมากไปน้อย ในชั้นเรียนชีวิตจริงได้รับการออกแบบมาเพื่อจัดการกับวัตถุเช่น - มนุษย์เรามีวรรณะศาสนาสัญชาติและอื่น ๆ อีกมากมาย วรรณะศาสนาสัญชาติเหล่านี้เป็นชนชั้นและไม่มีการดำรงอยู่โดยไม่มีมนุษย์ แต่ในการนำไปใช้งานจะไม่มีการดำรงอยู่ของวัตถุที่ไม่มีคลาส Object- Object เป็นเอนทิตีที่ไม่ต่อเนื่องซึ่งมีแอตทริบิวต์ที่กำหนดไว้อย่างดี ในที่นี้ไม่ต่อเนื่องหมายถึงสิ่งที่ทำให้แตกต่างจากที่อื่น แอตทริบิวต์ที่กำหนดไว้อย่างดีมีความหมายในบางบริบท Class- การจำแนกประเภทของวัตถุที่มีพฤติกรรมร่วมกันหรือวัตถุบางประเภททั่วไป


-1

แม้ว่าคำตอบข้างต้นจะถูกต้อง แต่อีกวิธีหนึ่งในการคิดเกี่ยวกับคลาสและออบเจ็กต์ก็คือการใช้ตัวอย่างในโลกแห่งความเป็นจริงคลาสที่ชื่อสัตว์อาจมีสิ่งของเช่นแมวสุนัขหรือปลา วัตถุที่มีชื่อของพระคัมภีร์จะเป็นหนังสือชั้นเรียนเป็นต้นชั้นเรียนทั่วไปวัตถุมีความเฉพาะเจาะจง ตัวอย่างความคิดนี้ช่วยฉันเมื่อฉันเรียนภาษา Java


ใช่ ... แต่การเปรียบเทียบก็อาจทำให้สับสนได้เช่นกัน ถ้าAnimalเป็นชั้นเรียนและCatเป็นตัวอย่างแมวเหมียว "ปุย" ของฉันคืออะไร?
Stephen C

ในความเป็นจริงในโลกแห่งความเป็นจริง (และในทฤษฎีประเภท) Animalหมายถึงชุดของสัตว์ทั้งหมดและCatหมายถึงชุดของแมวทั้งหมด Catเป็นส่วนหนึ่งของไม่ได้ตัวอย่างของAnimal Animal
Stephen C

-2

คลาสคือเทมเพลตหรือประเภท วัตถุเป็นตัวอย่างของคลาส

ตัวอย่างเช่น:

public class Tweet {

}

Tweet newTweet = new Tweet();

ทวีตเป็นคลาสและ newTweet เป็นวัตถุของคลาส


สิ่งเหล่านี้เป็นเพียงคำพูด คุณไม่ได้อธิบายความหมายของคำจริงๆ (และในความเป็นจริงคลาส Java จะไม่ทำงานเหมือนเทมเพลตทั้งในชีวิตจริงหรือในแบบที่ทำในภาษาเช่น Javascript, Python, Ruby เป็นต้น)
Stephen C
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.