জাভা ফাইলের একাধিক শ্রেণি থাকতে পারে?


105

জাভা ফাইলে একাধিক ক্লাস করার উদ্দেশ্য কী? আমি জাভাতে নতুন

সম্পাদিত: পাবলিক ক্লাসের অভ্যন্তরীণ বর্গ তৈরি করে এটি অর্জন করা যায়, তাই না?


উত্তর:


128

বনভ. তবে ফাইলের জন্য কেবলমাত্র একটি জনসাধারণের শীর্ষ-স্তরের শ্রেণি .javaথাকতে পারে এবং সর্বজনীন শীর্ষ স্তরের শ্রেণীর অবশ্যই উত্স ফাইলের মতো একই নাম থাকতে হবে।

একটি উত্স ফাইলে একাধিক ক্লাস অন্তর্ভুক্ত করার উদ্দেশ্য হ'ল মূল পাবলিক ক্লাসের সাথে সম্পর্কিত সমর্থন কার্যকারিতা (অভ্যন্তরীণ ডেটা স্ট্রাকচার, সমর্থন ক্লাস, ইত্যাদি) বান্ডিল করা। মনে রাখবেন যে এটি না করা সর্বদা ঠিক আছে - কেবলমাত্র আপনার কোডের পঠনযোগ্যতার (বা না) প্রভাব রয়েছে।


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

3
এটি সেখানে 1.0 সামঞ্জস্যতার জন্য (নেস্টেড ক্লাসগুলির আগে)। এটি ভাষার একটি বড় ভুল। এটি ব্যবহারের সবচেয়ে বড় সুবিধা হ'ল আইডিইগুলিতে হতাশ ফাইল হ্যান্ডলিং থাকে।
টম হাটিন -

25
প্রতি জন ফাইলের জন্য জনসাধারণের, শীর্ষ স্তরের শ্রেণি। আপনার পছন্দ মতো ফাইলের জন্য অনেকগুলি অভ্যন্তরীণ ক্লাস থাকতে পারে।
এরিকসন

@ টম, আপনি কোন অংশটিকে ভুল বলে মনে করছেন, অভ্যন্তরীণ ক্লাস বা ফাইলের জন্য একাধিক শীর্ষ-স্তরের শ্রেণি?
ফিনউ

@ ফাইল প্রতি একাধিক শীর্ষ-স্তরের ক্লাস। এটা ঠিক এত ভুল। কোথায় আছে java.awt.LightweightDispatcher?
টম হাটিন -

17

আপনি যদি কোনও সার্বজনীন শ্রেণি প্রয়োগ করতে চান তবে আপনাকে অবশ্যই এই শ্রেণীর মতো একই নামের কোনও ফাইলে এটি প্রয়োগ করতে হবে। একটি একক ফাইলে একটি জনসাধারণ এবং allyচ্ছিকভাবে কিছু ব্যক্তিগত ক্লাস থাকতে পারে। ক্লাসগুলি কেবলমাত্র সরকারী শ্রেণীর দ্বারা অভ্যন্তরীণভাবে ব্যবহার করা হলে এটি কার্যকর। অতিরিক্ত হিসাবে পাবলিক ক্লাসে অভ্যন্তরীণ ক্লাসগুলিও থাকতে পারে।

যদিও একটি একক উত্স ফাইলে এক বা একাধিক প্রাইভেট ক্লাস রাখা ভাল, তবে আমি এটির পরিবর্তে অভ্যন্তরীণ এবং বেনাম শ্রেণি ব্যবহার করার জন্য আরও পাঠযোগ্য। উদাহরণস্বরূপ, কোনও জনসাধারণের বর্গের মধ্যে তুলনামূলক শ্রেণি সংজ্ঞায়িত করতে বেনাম শ্রেণি ব্যবহার করতে পারেন:

  public static Comparator MyComparator = new Comparator() {
    public int compare(Object obj, Object anotherObj) {

    }
  };

তুলনামূলক শ্রেণীর সর্বজনীন হওয়ার জন্য সাধারণত পৃথক ফাইলের প্রয়োজন হয়। এই উপায়টি এটি ব্যবহার করে এমন শ্রেণীর সাথে বান্ডিল হয়।


1
এটি কোনও প্রাইভেট ক্লাস নয় যদি এটি নো-মডিফায়ারযুক্ত ফাইলে থাকে। এটি কোনও অভ্যন্তরীণ শ্রেণি না হয়ে আপনি কোনও প্রাইভেট ক্লাস রাখতে পারবেন না কারণ আপনি যদি করেন তবে কে এটি ব্যবহার করতে পারে?
বিয়ন্সের

10

হ্যাঁ, আপনি যতটা চান!

কিন্তু, প্রতিটি ফাইলে একটি মাত্র "জনসাধারণ" শ্রেণি রয়েছে।


6

এ। জাভা ফাইলকে সংকলন ইউনিট বলে। প্রতিটি সংকলন ইউনিটে শীর্ষ স্তরের ক্লাস এবং ইন্টারফেসের সংখ্যক সংখ্যক উপাদান থাকতে পারে। যদি কোনও সর্বজনীন শীর্ষ-স্তরের প্রকার না থাকে তবে সংকলনের ইউনিটটির নাম দেওয়া যেতে পারে।

//Multiple.java
//preceding package and import statements

class MyClass{...}
interface Service{...}
...
//No public classes or interfaces
...

সংকলন ইউনিটে কেবলমাত্র একটি পাবলিক ক্লাস / ইন্টারফেস থাকতে পারে। এই জনসাধারণের শীর্ষ-স্তরের প্রকারের মতো ঘনকটির অবশ্যই নামকরণ করা উচিত।

//Test.java
//named exactly as the public class Test
public class Test{...}
//!public class Operations{...}
interface Selector{...}
...
//Other non-public classes/interfaces

মূল পদ্ধতি সম্পর্কে গুরুত্বপূর্ণ বিষয় - অংশ 1

অংশ ২

(অংশ 2 এর আওতায় শ্রেণীর সংখ্যা এবং তাদের অ্যাক্সেসের স্তর সম্পর্কিত পয়েন্ট)


5

হ্যাঁ আপনি একাধিক পাবলিক ক্লাস তৈরি করতে পারেন তবে এটি একটি নেস্টেড ক্লাস হতে হবে।

public class first {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }

    public class demo1
    {

        public class demo2
        {

        }
    }
}

4

বেনামে অভ্যন্তর শ্রেণীর পাশাপাশি, অন্য ব্যবহার হ'ল ব্যক্তিগত অভ্যন্তর শ্রেণি যা একটি পাবলিক ইন্টারফেস প্রয়োগ করে ( এই নিবন্ধটি দেখুন )। বাইরের শ্রেণি অভ্যন্তর শ্রেণীর সমস্ত ব্যক্তিগত ক্ষেত্র এবং পদ্ধতি অ্যাক্সেস করতে পারে।

এটি আপনাকে দুটি বাস্তবায়ন প্রকাশ না করে যেমন একটি মডেল এবং এর দৃশ্যের মতো দুটি দৃ tight়-সংযুক্ত ক্লাস তৈরি করতে দেয়। আর একটি উদাহরণ সংগ্রহ এবং এর পুনরাবৃত্তকারী।


4

সাধারণভাবে, ফাইলের জন্য একটি শ্রেণি থাকতে হবে। আপনি যদি সেভাবে জিনিসগুলি সংগঠিত করেন, তারপরে আপনি যখন কোনও শ্রেণীর জন্য অনুসন্ধান করেন, আপনি জানেন যে কেবলমাত্র সেই নামটি দিয়ে আপনার ফাইলটি অনুসন্ধান করা দরকার।

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


4

হ্যা 200% ,

উদাহরণ:

class A {
 void methodDeclaration() { System.out.println("!!!"); }
 }
 class B {
 public static void main(String[] args) {
new A().methodDeclaration();
    }
 }

2

হ্যাঁ এটি পারে, তবে যে কোনও প্যাকেজের ভিতরে কেবল ১ টি পাবলিক ক্লাস থাকতে পারে কারণ জাভা সংকলকটি। ক্লাস ফাইলটি তৈরি করে যা সর্বজনীন শ্রেণির নাম হিসাবে একই নামে থাকে তাই যদি তাদের 1 টিরও বেশি পাবলিক বর্গ হয় তবে এটির জন্য নির্বাচন করা কঠিন হবে সংকলক যে ক্লাস ফাইলের নাম হওয়া উচিত।


1

পরিবর্তিত হয় ... এরকম একটি উদাহরণ একটি বেনাম শ্রেণি হবে (ইভেন্ট শ্রোতাদের এবং এরকম ব্যবহার করার সময় আপনি সেই সমস্তগুলির মুখোমুখি হবেন)।


1

আমি মনে করি এটি "জাভা ফাইলের জন্য কেবলমাত্র কোনও নন-স্ট্যাটিক শীর্ষ স্তরের পাবলিক ক্লাস থাকতে পারে" হওয়া উচিত। তাই না?


এখানে উত্তর দেওয়ার পরিবর্তে আপনার এটি প্রশ্ন হিসাবে জিজ্ঞাসা করা উচিত।
আশীষ কুমার

1

আপনি যদি কোনও সিঙ্গেলটন প্রয়োগ করতে চান, এটি এমন একটি ক্লাস যা আপনার প্রোগ্রামে প্রয়োগের পুরো সঞ্চালনের সময় স্মৃতিতে কেবল একটি উদাহরণ দিয়ে চলে, তবে সিঙ্গলটন বাস্তবায়নের একটি উপায় হল একটি পাবলিক ক্লাসের ভিতরে একটি প্রাইভেট স্ট্যাটিক ক্লাস বাসা বাঁধাই to । তারপরে অভ্যন্তরীণ ব্যক্তিগত শ্রেণিটি কেবল তখনই তাত্ক্ষণিক হয় যখন ব্যক্তিগত দৃষ্টান্তটি অ্যাক্সেস করার জন্য এর সরকারী পদ্ধতিটি ডাকা হয়।

এই উইকি নিবন্ধটি দেখুন,

https://en.wikipedia.org/wiki/Singleton_pattern

ধারণাটি চিবিয়ে নিতে কিছুটা সময় নেয়।


1

একটি জাভা ফাইলে, কেবলমাত্র একটি জনসাধারণের শীর্ষ স্তরের শ্রেণি থাকতে পারে যার নাম ফাইলের সমান, তবে বেশ কয়েকটি পাবলিক অভ্যন্তরীণ শ্রেণি থাকতে পারে যা প্রত্যেকের কাছে রফতানি করা যায় এবং বহিরাগত শ্রেণীর ক্ষেত্র / পদ্ধতিগুলি অ্যাক্সেস করতে পারে, উদাহরণস্বরূপ : সতর্কতা ডায়ালগ.বিল্ডার ('পাবলিক স্ট্যাটিক' দ্বারা সংশোধিত ) সতর্কতা ডায়ালগে ('পাবলিক' দ্বারা সংশোধিত)


1

হ্যাঁ আপনি এক। জাভা ফাইলে একাধিক ক্লাস করতে পারেন। তবে আপনি তাদের একটিকে সর্বজনীন করে তুলেছেন। এবং পাবলিক ক্লাসের নাম হিসাবে একই নাম দিয়ে জাভা ফাইল সংরক্ষণ করুন। আপনি যখন জাভা ফাইলটি সংকলন করবেন তখন আপনি জাভা ফাইলে সংজ্ঞায়িত প্রতিটি শ্রেণীর জন্য পৃথক। ক্লাস ফাইল পাবেন।

এটি ছাড়াও একটি। জাভা ফাইলে একাধিক শ্রেণি নির্ধারণের জন্য অনেকগুলি পদ্ধতি রয়েছে।

  1. অভ্যন্তরীণ ক্লাসগুলির ধারণা ব্যবহার করুন।
  2. বেনাম শ্রেণীর ধারণার ব্যবহার করুন।

1

হ্যাঁ ! । জাভা ফাইলটিতে একটি মাত্র পাবলিক ক্লাস থাকতে পারে।

আপনি যদি এই দুটি ক্লাসটি সর্বজনীন হতে চান তবে তাদের দুটি। জাভা ফাইলের মধ্যে রাখতে হবে: এ। জাভা এবং বি জাভা।


2
আমি নিশ্চিত আপনার প্রতিক্রিয়া অ্যাড আর কিছু 12 অন্যদের উত্তর থেকে চেয়ে নই
এতে যান

1

হ্যাঁ। জাভা ফাইলের মধ্যে আপনার একাধিক শ্রেণি থাকতে পারে। তাদের মধ্যে বেশিরভাগেরই প্রকাশ্য হতে পারে। অন্যগুলি প্যাকেজ-প্রাইভেট। তারা ব্যক্তিগত বা সুরক্ষিত হতে পারে না। যদি কেউ সর্বজনীন হয় তবে ফাইলটির অবশ্যই সেই শ্রেণীর নাম থাকতে হবে। অন্যথায় তার ফাইল হিসাবে আর কোনও ফাইল দেওয়া যাবে না।

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

আরও তদন্তের জন্য, আপনি আমার ব্লগ পোস্টটি এখানে দেখতে পারেন


1
স্ট্যাক ওভারফ্লোতে স্বাগতম! আমি প্রশংসা করি যে আপনি ইতিমধ্যে এখানে আচ্ছাদন করা হয়নি যে তথ্য বিস্তৃত। মালিকানা ঘোষণার সময় এবং এখানে প্রাসঙ্গিক তথ্য সহ আপনি নিজের ব্লগ পোস্টের উদ্ধৃতি দেওয়ার জন্যও ভাল কাজ করেছেন। যদি আপনি ভবিষ্যতে এই সাইটে আরও অবদান রাখার জন্য চয়ন করেন (এবং আমি আশা করি আপনি এটি করেন) তবে আপনি যদি আপনার ব্লগ উদ্ধৃত করেন তবে আপনার পোস্টগুলি ভালভাবে প্রাপ্ত হতে পারে তা নিশ্চিত করার জন্য এই নিবন্ধটি বিবেচনা করে নিশ্চিত করুন।
ক্যাসেল

0

এখানে কেবলমাত্র এক জনসাধারণের শীর্ষ স্তর থাকতে পারেএকটি ফাইলে শ্রেণি । সেই সর্বজনীন শ্রেণীর শ্রেণির নামটি ফাইলের নাম হওয়া উচিত। এটিতে অনেকগুলি সরকারী অভ্যন্তর শ্রেণি থাকতে পারে।

আপনার একক ফাইলে অনেক ক্লাস থাকতে পারে। একটি ফাইলে শ্রেণীর দৃশ্যমানতার বিভিন্ন স্তরের সীমাগুলি নিম্নরূপ:

শীর্ষ স্তরের শ্রেণি:
1 টি পাবলিক ক্লাস
0 বেসরকারী
/ সুরক্ষিত শ্রেণীর যে কোনও সংখ্যক ব্যক্তিগত ক্লাস

অভ্যন্তরীণ ক্লাস:
যে কোনও দৃশ্যমানতার সাথে অভ্যন্তরীণ শ্রেণীর সংখ্যা (ডিফল্ট, ব্যক্তিগত, সুরক্ষিত, সর্বজনীন)

আমি ভুল হলে আমাকে সংশোধন করুন।


0

বনভ. তবে জাভা ফাইলের জন্য শুধুমাত্র একটি পাবলিক ক্লাস থাকতে পারে, কেননা পাবলিক ক্লাসগুলির উত্স ফাইলের মতো একই নাম থাকতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.