वर्ग और प्रकार के बीच अंतर


105

जावा में नया होने के नाते, मैं वर्ग और प्रकार की अवधारणाओं के बीच भ्रमित हूं । उदाहरण के लिए, वस्तु प्रकार या वर्ग"Hello World!" से संबंधित होनी चाहिए ? या शायद दोनों? String String


24
हाल ही में किसी भी "शुरुआती" शैली के सवालों को कम करने के लिए एक झुकाव प्रतीत होता है कि वे अच्छे हैं या नहीं। इसका गुस्सा, कम से कम कहने के लिए।
nico_c

9
मतदाता को समझ में नहीं आने वाले किसी भी प्रश्न को कम करने के लिए ...
मार्निग ऑफ लोर्ने

4
मैं मानता हूं कि आप शुरुआत के सवालों को कहने के लिए थोड़े असभ्य हैं, लेकिन चाहे वह अच्छा हो या बुरा, सभी शुरुआती सवालों के जवाब वेब पर खोजकर ही मिलते हैं। समस्या और कारण लोगों को नीचा दिखाना है क्योंकि यह अतिप्रवाह ढेर करने के लिए नेतृत्व कर रहा है :)
मार्को लाज़िक

13
यह एक महान सवाल है - और 3 वोट बंद होने के लिए हमें खुले रखने के लिए वोट करने में सक्षम होने की आवश्यकता क्यों है । मुझे अब भी याद है जब मैं जावा सीख रहा था कि OO शब्दजाल सबसे बड़ी बाधा थी।
लॉरेंस डोल

4
@nickecarlo अक्सर पूछे जाने वाले प्रश्न में एक बिंदु हुआ करता था, जो कि पिछले साल के दौरान निकाला गया लगता है - "यह प्रश्न अनुसंधान की गंभीर कमी को दर्शाता है और प्रश्न पूछने से पहले इसे हल करने के लिए किए गए प्रयासों के संकेत नहीं दिखाता है। "। मुझे यह कष्टप्रद लगता है कि वहाँ एक बकवास बकवास सवाल है कि Google यहाँ लोगों के बजाय वास्तव में अपना समय बर्बाद कर सकता है "प्रोग्रामिंग 101" दूसरों को समझा रहा है।
टीसी 1

जवाबों:


123

एक वर्ग एक प्रकार है। एक इंटरफ़ेस एक प्रकार है। एक आदिम एक प्रकार है। एक सरणी एक प्रकार है।

इसलिए, प्रत्येक प्रकार या तो एक वर्ग (एक एनम स्थिरांक सहित), एक इंटरफ़ेस, एक आदिम या एक सरणी है।

प्रकार की दो अलग-अलग श्रेणियां हैं: आदिम प्रकार और संदर्भ प्रकार:

  • आदिम प्रकार का एक चर हमेशा उसी प्रकार का एक आदिम मूल्य रखता है। ऐसा मान केवल उस चर पर असाइनमेंट संचालन द्वारा बदला जा सकता है।
  • संदर्भ प्रकार का एक चर हमेशा किसी वस्तु के संदर्भ का मूल्य रखता है। सरणियों सहित सभी ऑब्जेक्ट, कक्षा के तरीकों का समर्थन करते हैं Object। संदर्भ प्रकार वर्ग प्रकार (एनम प्रकार सहित), इंटरफ़ेस प्रकार और सरणी प्रकार हैं।

डेटा के हर टुकड़े में एक प्रकार होता है जो इसकी संरचना को परिभाषित करता है, अर्थात् यह कितना मेमोरी लेता है, इसे कैसे रखा जाता है, और इससे भी महत्वपूर्ण बात यह है कि आप इसके साथ कैसे बातचीत कर सकते हैं।

आदिम प्रकार के उदाहरण:

  1. int
  2. float
  3. char
  4. boolean

वर्ग प्रकार के उदाहरण:

  1. String
  2. Integer
  3. Boolean
  4. ArrayList
  5. StringBuilder

इंटरफ़ेस प्रकार के उदाहरण:

  1. Collection
  2. List
  3. Map
  4. Serializable

सरणी प्रकारों के उदाहरण:

  1. int[]
  2. String[]
  3. Integer[][][]

मूल रूप से, एक चर के रूप में आप जो कुछ भी संदर्भित कर सकते हैं उसका एक प्रकार है, और कक्षाएं एक प्रकार का एक प्रकार है।

अधिक जानकारी यहाँ: http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html


6
सरणियाँ मत भूलना।
पॉल बेलोरा

1
मैं अपने आप को संपादित नहीं करूंगा क्योंकि मैं निश्चित नहीं हूं कि आप क्या लिखना चाहते हैं, लेकिन यह बेहतर काम कर सकता है कि कक्षाएं "एक प्रकार का" के बजाय "एक प्रकार का" हैं।
एक CVn

@ माइकलकॉर्जलिंग हां, यह कहने का एक बेहतर तरीका है। मैं इसे अपडेट करूंगा।
ब्रैंडन

3
आप अशक्त प्रकार भूल गए (देखें JLS 4.1)।
user1803551

1
@AndyDong एक सार वर्ग अभी भी एक वर्ग है।
ब्रैंडन

6

TLDR - कक्षा जावा में टाइप में से एक है।

नोट - उत्तर को पूरी तरह से समझने के लिए, आपको जावा में जेनेरिक के बारे में थोड़ा विचार करना चाहिए।


अंतर को समझने के लिए आइए पहले समझते हैं कि जावा में एक प्रकार क्या है ।

जेएलएस एसई 10 के अनुसार ,

जावा प्रोग्रामिंग भाषा में दो प्रकार के प्रकार होते हैं: आदिम प्रकार ( .24.2 ) और संदर्भ प्रकार ()4.3)।

आदिम प्रकार क्या है?

a) अभिन्न प्रकार बाइट, लघु, int, और लंबे होते हैं , जिनके मान 8-बिट, 16-बिट, 32-बिट और 64-बिट पर हस्ताक्षर किए गए दो-पूरक पूर्णांक, क्रमशः और चार होते हैं, जिनके मान 16-बिट होते हैं अहस्ताक्षरित पूर्णांक UTF-16 कोड इकाइयों (UT3.1) का प्रतिनिधित्व करते हैं।

b) फ्लोटिंग-पॉइंट प्रकार फ्लोट हैं , जिनके मानों में 32-बिट IEEE 754 फ़्लोटिंग-पॉइंट नंबर और डबल शामिल हैं , जिनके मान में 64-बिट IEEE 754 फ़्लोटिंग-पॉइंट नंबर शामिल हैं।

ग) बूलियन प्रकार के दो मूल्य हैं: सच और गलत।

अब, आइये संदर्भ प्रकार क्या है?

चार प्रकार के संदर्भ प्रकार होते हैं: वर्ग प्रकार ( ) 8.1 ), इंटरफ़ेस प्रकार ( kinds9.1 ), प्रकार चर ( ables4.4 ), और सरणी प्रकार ( .110.1 )।

आइए हम एक-एक करके चर्चा करें।

यदि आप देखें कि जेएलएस में क्लास को इस तरह कैसे परिभाषित किया जाता है:

एक वर्ग घोषणा एक नया नाम संदर्भ प्रकार निर्दिष्ट करता है।

वर्ग घोषणाएँ दो प्रकार की होती हैं: सामान्य कक्षा घोषणाएँ और एनम घोषणाएँ

ClassDeclaration:
NormalClassDeclaration 
EnumDeclaration
NormalClassDeclaration:
{ClassModifier} class TypeIdentifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody

आप देखते हैं कि [TypeParameters], यह दिखाता है कि वर्ग प्रकार में वे सामान्य वर्ग भी शामिल हैं।

class Example<T>{

}

वर्ग प्रकार कहा जाएगा Example

संक्षेप में, एक वर्ग प्रकार हमारे एनमों, हमारे नियमित (गैर जेनेरिक) वर्गों जैसे Stringआदि और हमारे सामान्य वर्गों को भी कवर करता है।

इसी तरह, मुझे उम्मीद है कि इंटरफ़ेस और सरणी प्रकार भी स्पष्ट है। सरणी प्रकार से हमारा मतलब है int[], String[]आदि।

अंतिम भाग में आते हैं - वेरिएबल्स टाइप करें। वे क्या हैं ?

एक प्रकार का चर एक अयोग्य पहचानकर्ता है जिसका उपयोग कक्षा, इंटरफ़ेस, विधि और निर्माणकर्ता निकायों में एक प्रकार के रूप में किया जाता है।

आइए इसे नीचे दिए गए JLS में उदाहरण द्वारा समझते हैं।

class Test {
    <T extends C & I> void test(T t) {  
        t.mI();           // OK
        t.mCPublic();     // OK 
        t.mCProtected();  // OK 
        t.mCPackage();    // OK

    } 
}

आप देखते हैं कि विधि पैरामीटर में आपकी वस्तु प्रकार की है T। हां, यह Tटाइप वेरिएबल है और इसे संदर्भ के रूप में इस्तेमाल किया जा सकता है। हाँ यही है। (इस विचित्र उदाहरण को नहीं समझ सके - जानें जावा में जेनेरिक विधि क्या है)

यह उत्तर पूरा करता है।


4

"टाइप" अधिक समावेशी श्रेणी है। जावा में चर तीन प्रकार के हो सकते हैं: 8 "आदिम" प्रकार जैसे इंट और फ्लोट, इंटरफेस और कक्षाएं। मान (चर के विपरीत) आदिम या वर्ग उदाहरण हो सकते हैं।


2

"टाइप" परिभाषित करता है कि यह किस प्रकार का डेटा है '

Ex: "हेल्लो वर्ल्ड" एक स्ट्रिंग है -> "हैलो वर्ल्ड" स्ट्रिंग प्रकार है (स्ट्रिंग int के विपरीत एक प्राइमेटिव डेटा नहीं है .. इसलिए हम कह सकते हैं "हैलो वर्ल्ड" एक स्ट्रिंग क्लास प्रकार है)

10 एक int -> 10 पूर्णांक डेटा प्रकार है।


5
पूर्णांक के बाद से int को समझाने के लिए पूर्णांक का उपयोग करने के साथ सावधान रहें! = जावा में int।
nico_c
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.