শ্রেণি এবং প্রকারের মধ্যে পার্থক্য


105

জাভাতে নতুন হওয়ার কারণে আমি শ্রেণি এবং প্রকারের ধারণাগুলির মধ্যে বিভ্রান্ত । উদাহরণ হিসেবে বলা যায়, should বস্তুর "Hello World!"অন্তর্গত টাইপ String বা বর্গ String ? না হয় দুজনেই?


24
ইদানীং মনে হয় যে কোনও "শিক্ষানবিশ" শৈলীর প্রশ্ন যে তারা ভাল হোক না কেন তাকে নিম্নমুখী করার প্রবণতা রয়েছে। এটি বিরক্তিকর, অন্তত বলতে চাই।
নিকো_সি

9
ভোটাররা বুঝতে পারে না এমন কোনও প্রশ্নকেও হ্রাস করতে ...
লার্নের মারকুইস

4
আমি মনে করি আপনি প্রাথমিক প্রশ্নগুলি বলার সাথে সাথে ডাউনটাতে এক ধরণের অভদ্রতা পোষণ করতে সম্মত হন তবে ভাল বা খারাপ যাই হোক না কেন, সমস্ত প্রাথমিক প্রশ্নগুলির উত্তর কেবল ওয়েবে অনুসন্ধান করেই পাওয়া যায়। লোকেরা যে সমস্যাটি এবং জনগণকে নিম্নচাপে ফেলেছে তা হ'ল এটি ওভারফ্লোতে সজ্জিত করছে :)
মার্কো

13
এটি একটি দুর্দান্ত প্রশ্ন - এবং বন্ধ হওয়া 3 টি ভোট কেন আমাদের খোলার জন্য ভোট দিতে সক্ষম হওয়া প্রয়োজন ? আমার এখনও মনে আছে যখন আমি জাভা শিখছিলাম তখন ওও জার্গনটি সবচেয়ে বড় বাধা।
লরেন্স ডল

4
@ নিকারেকার্লো এফএইউএর একটি পয়েন্ট থাকত, যা মনে হয় গত এক বা এক বছরে নেওয়া হয়েছিল - "প্রশ্নটি গবেষণার মারাত্মক অভাব দেখায় এবং প্রশ্ন জিজ্ঞাসার আগে সমাধানের চেষ্টা করার লক্ষণ দেখায় না "। আমি বিরক্তিকর বলে মনে করি যে এখানে এমন অনেক টন বুলশিট প্রশ্ন রয়েছে যা গুগল এখানকার লোকদের পরিবর্তে অন্যদের কাছে "প্রোগ্রামিং 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[][][]

মূলত, আপনি ভেরিয়েবল হিসাবে উল্লেখ করতে পারেন এমন যে কোনও কিছু রয়েছে এবং শ্রেণিগুলি এক প্রকারের kind

এখানে আরও তথ্য: http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html


6
অ্যারেগুলি ভুলে যাবেন না।
পল বেলোরা

1
আমি নিজে সম্পাদনা করব না কারণ আপনি যেটা লিখতে চেয়েছিলেন তা আমি নিশ্চিত নই, তবে ক্লাসগুলি "এক ধরণের একটি ধরণের" না হয়ে "এক ধরণের" বলে এটি আরও ভালভাবে কাজ করতে পারে
একটি সিভিএন

@ মাইকেলKjörling হ্যাঁ, এটি বলার আরও ভাল উপায়। আমি এটি আপডেট করব।
ব্র্যান্ডন

3
আপনি নাল টাইপটি ভুলে গেছেন (জেএলএস ৪.১ দেখুন)।
ব্যবহারকারী1803551

1
@ অ্যান্ডিডং একটি বিমূর্ত শ্রেণি এখনও একটি ক্লাস।
ব্র্যান্ডন

6

টিএলডিআর - ক্লাস জাভা অন্যতম ধরণ।

দ্রষ্টব্য - উত্তরটি পুরোপুরি বুঝতে, আপনার জাভাতে জেনেরিক সম্পর্কে কিছুটা ধারণা থাকতে হবে।


পার্থক্যটি বোঝার জন্য প্রথমে জাভাতে টাইপ কী তা বুঝতে পারি ।

মতে JLS দঃপূঃ 10 ,

দুই ধরণের আছে ধরনের : জাভা প্রোগ্রামিং ভাষায় আদিম ধরনের ( §4.2 ) এবং রেফারেন্স ধরনের (§4.3)।

আদিম প্রকার কি?

ক) অবিচ্ছেদ্য প্রকারগুলি বাইট, শর্ট, ইনট এবং লম্বা , যার মানগুলি 8-বিট, 16-বিট, 32-বিট এবং 64-বিট স্বাক্ষরিত দুটি এর পরিপূরক পূর্ণসংখ্যার যথাক্রমে এবং চর, যার মানগুলি 16-বিট ইউটিএফ -16 কোড ইউনিট (.13.1) উপস্থাপন করে স্বাক্ষরযুক্ত পূর্ণসংখ্যাগুলি।

খ) ভাসমান-পয়েন্টের ধরণগুলি হ'ল ভাসমান , যার মানগুলিতে 32-বিট আইইইইই 754 ফ্লোটিং-পয়েন্ট সংখ্যা অন্তর্ভুক্ত থাকে এবং ডাবল , যার মানগুলি 64-বিট আইইইইই 754 ভাসমান-পয়েন্ট সংখ্যা অন্তর্ভুক্ত করে।

গ) বুলিয়ান ধরণের ঠিক দুটি মান রয়েছে: সত্য এবং মিথ্যা।

এখন, আসুন রেফারেন্স টাইপ কি?

এখানে চার ধরণের রেফারেন্স রয়েছে: শ্রেণীর প্রকার ( §8.1 ), ইন্টারফেসের ধরণ ( §9.1 ), ধরণের ভেরিয়েবল ( §4.4 ), এবং অ্যারের প্রকার ( §10.1 )।

আসুন আমরা একে একে আলোচনা করব।

আপনি যদি জেএলএসে দেখতে পান তবে ক্লাসটি এই জাতীয় সংজ্ঞাযুক্ত :

একটি শ্রেণীর ঘোষণা একটি নতুন নামযুক্ত রেফারেন্স ধরণ নির্দিষ্ট করে।

শ্রেণির ঘোষণা দুটি ধরণের রয়েছে: সাধারণ শ্রেণির ঘোষণা এবং এনাম ঘোষণা

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

আপনি দেখুন যে [TypeParameters], এটি দেখায় যে শ্রেণীর ধরণের মধ্যে সেই জেনেরিক ক্লাসগুলিও রয়েছে।

class Example<T>{

}

ক্লাস টাইপ কল করা হবে Example

সংক্ষেপে, একটি শ্রেণির ধরণটি আমাদের এনামগুলিকে, আমাদের নিয়মিত (নন জেনেরিক) Stringইত্যাদি এবং আমাদের জেনেরিক ক্লাসগুলিকেও অন্তর্ভুক্ত করে।

একইভাবে, আমি আশা করি ইন্টারফেস এবং অ্যারের প্রকারগুলিও পরিষ্কার। অ্যারে টাইপ দ্বারা আমরা ভালো মানে int[], String[]ইত্যাদি

আসুন শেষ অংশে আসি - ভেরিয়েবল টাইপ করুন। তারা কি?

একটি ধরণের পরিবর্তনশীল হ'ল শ্রেণিবদ্ধ, ইন্টারফেস, পদ্ধতি এবং কনস্ট্রাক্টর বডির ধরণ হিসাবে ব্যবহৃত একটি অযোগ্য সনাক্তকারী।

আসুন এর নীচে জেএলএসে উদাহরণ দিয়ে বুঝতে পারি।

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

"প্রকার" এটি কী ধরণের ডেটা হয় তা সংজ্ঞায়িত করে

উদাহরণস্বরূপ: "হ্যালো ওয়ার্ল্ড" একটি স্ট্রিং -> "হ্যালো ওয়ার্ল্ড" স্ট্রিং টাইপ (স্ট্রিং ইন্টের মতো নয় প্রিমিটিভ ডেটা .. তাই আমরা বলতে পারি "হ্যালো ওয়ার্ল্ড" স্ট্রিং ক্লাস টাইপ)

10 হ'ল একটি আন্ত -> 10 একটি পূর্ণসংখ্যা ডেটা টাইপ।


5
জাভাতে ইন্টিজার! = ইন্টের পর থেকে কোনও পূর্ণসংখ্যাটি ব্যাখ্যা করতে পূর্ণসংখ্যার ব্যবহারে সতর্ক হন।
নিকো_সি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.