কোনও বিমূর্ত পদ্ধতি ছাড়াই একটি বিমূর্ত শ্রেণীর সংজ্ঞা দেওয়া হচ্ছে


114

আমি কি বিমূর্ত পদ্ধতি যুক্ত না করে কোনও বিমূর্ত শ্রেণীর সংজ্ঞা দিতে পারি?


1
সাজসজ্জার ধরণে একটি ভাল উদাহরণ পাওয়া যায়, এখানে দেখুন । উভয় WindowDecoratorএবং CoffeeDecoratorহয় abstractক্লাস, কিন্তু কেউই একটি অন্তর্ভুক্ত abstractপদ্ধতি।
এমএস দৌস্তি

উত্তর:


168

অবশ্যই.

শ্রেণীর বিমূর্ত ঘোষণা ঘোষণার অর্থ হ'ল আপনি নিজেরাই এটিকে ইনস্ট্যান্ট করার অনুমতি দিচ্ছেন না।

কোনও পদ্ধতি বিমূর্ত ঘোষণার অর্থ সাবক্লাসগুলি সেই পদ্ধতির জন্য একটি প্রয়োগকরণ সরবরাহ করতে হবে।

দুটি পৃথক ধারণা, যদিও স্পষ্টতই আপনি একটি অ-বিমূর্ত শ্রেণিতে একটি বিমূর্ত পদ্ধতি রাখতে পারবেন না। এমনকি আপনি finalপদ্ধতিগুলি সহ বিমূর্ত ক্লাস করতে পারেন তবে অন্যভাবে কখনও নয় never


14

হ্যাঁ, আপনি এটা করতে পারেন. আপনি কেবল এটি করার চেষ্টা করছেন না কেন?


6
এবং এটি কেবল ওপি নয়। প্রশ্ন উঠেছে সমস্ত upvotes দেখুন!
মার্চ ডব্লিউ

54
@ করিম high৯ এখানে উচ্চ ঘোড়া এবং সস -ালার সমস্ত জিনিসগুলির প্রয়োজন নেই। এটি চেষ্টা করার পরে এটি কেন অনুমতি দেওয়া হয়েছে তা পুরোপুরি প্রকাশ করে না, সম্ভবত এটি জিজ্ঞাসা করার সময়।
বিজিক্লপ

7
@ বিজক্লপ - এটি নিজের জন্য চেষ্টা করার ফলে আরও একটি উত্পাদনশীল প্রশ্ন উঠেছে। কোনও উঁচু ঘোড়া নেই। এই বেশ সহজ. তার প্রশ্ন ছিল 'কেন আমি ...' এর চেয়ে 'ক্যান আমি'।
karim79

8
যদি প্রশ্নের উত্তর হ্যাঁ বা না দিয়ে দেওয়া যায়, তবে প্রশ্নকারীর পুনরায় কাজ করা, গুগল ব্যবহার করা বা কেবল এটি চেষ্টা করে দেখতে হবে।
টাইলার

3
@ করিম 79৯ হ্যাঁ, প্রশ্নটি আরও ভালভাবে বর্ণিত হতে পারে তবে আমি অনুমান করি যে এটি আরও এক ধাপ এগিয়ে দেখার জন্য এত প্রচেষ্টা নিবে না।
বাইজিক্লপ

8

হ্যা, তুমি পারো. জাভাতে ব্যবহৃত বিমূর্ত শ্রেণিটি বোঝায় যে আপনি শ্রেণীর কোনও বস্তু তৈরি করতে পারবেন না। এবং একটি বিমূর্ত পদ্ধতি সাবক্লাসগুলিকে সেই পদ্ধতির জন্য একটি প্রয়োগকরণ সরবরাহ করতে হবে।

সুতরাং আপনি কোনও বিমূর্ত পদ্ধতি ছাড়াই সহজেই একটি বিমূর্ত শ্রেণীর সংজ্ঞা দিতে পারেন।

উদাহরণ হিসাবে:

public abstract class AbstractClass{

    public String nonAbstractMethodOne(String param1,String param2){
        String param = param1 + param2;
        return param;
    }

    public static void nonAbstractMethodTwo(String param){
        System.out.println("Value of param is "+param);
    }
}

্রফ.


6

হ্যাঁ আপনি যে কোনও বিমূর্ত পদ্ধতি সহ বিমূর্ত শ্রেণি তৈরি করতে পারেন বিমূর্ত পদ্ধতি ব্যতীত অ্যাবস্ট্রাক্ট শ্রেণির সর্বোত্তম উদাহরণ হ'ল এইচটিপি সার্ভলেট
অ্যাবস্ট্রাক্ট পদ্ধতি এমন একটি পদ্ধতি যার কোনও দেহ নেই, আপনি যদি ক্লাসে কমপক্ষে একটি পদ্ধতি ঘোষণা করেন তবে শ্রেণিকে অবশ্যই घोषित করতে হবে বিমূর্তিটি এর বাধ্যতামূলক তবে তবে যদি আপনি বিমূর্ত শ্রেণিকে শ্রেণীর অভ্যন্তরে বিমূর্ত পদ্ধতি ঘোষণা করা বাধ্যতামূলক না ঘোষণা করে থাকেন।

আপনি বিমূর্ত শ্রেণীর বস্তু তৈরি করতে পারবেন না, যার অর্থ এটি তাত্ক্ষণিকভাবে চালু করা যায় না।


4

হ্যাঁ, আপনি এমন কোনও ক্লাস ঘোষণা করতে পারেন যা ইতিমধ্যে বাস্তবায়ন রয়েছে কেবল এমন পদ্ধতিতে আপনি নিজেই তা ইনস্ট্যান্ট করতে পারবেন না। আপনি যদি ভবিষ্যতে বিমূর্ত পদ্ধতি যুক্ত করতে চান, বা শ্রেণীর কোনও অ্যাবস্ট্রাক্ট বৈশিষ্ট্য না থাকলেও সরাসরি ইনস্ট্যান্ট করা না চাইলে এটি কার্যকর হবে to


প্রশ্নটি ফাঁকা অ্যাবস্ট্রাক্ট ক্লাস সম্পর্কে ছিল না, বিমূর্ত পদ্ধতি ছাড়াই কেবল বিমূর্ত শ্রেণির জন্য। সম্পূর্ণ খালি বিমূর্ত শ্রেণির ব্যবহারের জন্য আমি যতদূর দেখতে পাচ্ছি তার কোনও বৈধ কারণ নেই।
বিজিক্লপ

1
উত্তর স্থির। আপনার যদি পরে বিমূর্ত পদ্ধতি যুক্ত করতে চান এবং অন্য কোনও পিতামাতার ক্লাসগুলি রিফ্যাক্টরিংয়ের সাথে ডিল করতে না হয় তবে খালি অ্যাবস্ট্রাক্ট ক্লাসটি ব্যবহার করা কার্যকর হতে পারে।
গর্ডন গুস্তাফসন

1
শ্রেণিবিন্যাসের মাঝামাঝি সময়ে, পুরোপুরি খালি (উত্তরাধিকারের বৈশিষ্ট্য ব্যতীত) বিমূর্ত শ্রেণিটি বোধগম্য হতে পারে যদি সেই শ্রেণীর বংশগতকরণের পিতামাতার অন্যান্য উপকরণগুলির থেকে পৃথক চুক্তিগত বাধ্যবাধকতা থাকে।
সুপারক্যাট

3

হ্যাঁ, আমরা কোনও বিমূর্ত পদ্ধতি ছাড়াই একটি বিমূর্ত শ্রেণির ঘোষণা করতে পারি। কোনও শ্রেণিকে বিমূর্ত হিসাবে ঘোষণা করার উদ্দেশ্যটি ক্লাসটি তাত্পর্যপূর্ণ করা নয়।

সুতরাং দুটি ক্ষেত্রে

1) বিমূর্ত পদ্ধতি সহ বিমূর্ত শ্রেণি।

এই ধরণের ক্লাসগুলি, আমাদের অবশ্যই এই বিমূর্ত শ্রেণি থেকে একটি শ্রেণীর উত্তরাধিকারী হতে হবে এবং অবশ্যই আমাদের ক্লাসে বিমূর্ত পদ্ধতিগুলি ওভাররাইড করতে হবে, যেমন: জেনেরিক সার্লেট ক্লাস

2) বিমূর্ত পদ্ধতি ছাড়া বিমূর্ত শ্রেণি।

এই ধরণের ক্লাসগুলি, আমাদের অবশ্যই এই বিমূর্ত শ্রেণি থেকে একটি শ্রেণীর উত্তরাধিকারী হতে হবে, উদাহরণস্বরূপ: এইচটিটিপি সার্লেট ক্লাস করার উদ্দেশ্য হ'ল আপনি যদি শিশু ক্লাসে আপনার যুক্তি বাস্তবায়ন না করেন তবে আপনি পিতামাতাকে যুক্তি পেতে পারেন

দয়া করে এইচটিটিপি সার্ভলেট উত্স কোডটি পরীক্ষা করুন


2

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


আমি কেন চাই না যে ক্লাসটি তাত্ক্ষণিকভাবে চালু করা যায় না? কোন ভাল কারণ, উদাহরণ?
করলিহনস

2

হ্যাঁ, আপনি একটি বিমূর্ত পদ্ধতি ছাড়াই একটি বিমূর্ত শ্রেণীর সংজ্ঞা দিতে পারেন। তবে, ভিতরে কোনও পদ্ধতি না থাকলে আপনার ইন্টারফেসের সাথে আরও ভালভাবে যেতে হবে


4
সর্বনিম্ন 30 অক্ষরের সীমা গ্রহণের জন্য দুর্দান্ত ধারণা।
মার্ক ডাব্লু

1
যদি কোনও বিমূর্ত পদ্ধতি না থাকে তবে একটি ইন্টারফেস কীভাবে ব্যবহার করা যেতে পারে? ইন্টারফেসের ডিফল্টরূপে সমস্ত পদ্ধতি বিমূর্ত থাকে।
উসমান রানা

1

হ্যাঁ আপনি এটি করতে পারেন

শ্রেণীর বিমূর্ত ঘোষণার অর্থ ক্লাসটি অন্য কোনও শ্রেণীর দ্বারা তাত্ক্ষণিকভাবে চালিত হবে না।

এবং এর ভিতরে কমপক্ষে একটি বিমূর্ত পদ্ধতি থাকা উচিত এবং এর অর্থ আপনি যদি সেই শ্রেণীর মধ্যে বিমূর্ত পদ্ধতিটি ঘোষণা করতে পারেন তবে আপনি যদি তার ঠিকানার চেয়ে কোনও পদ্ধতি ঘোষণা করেন না।

উদাহরণ:

public abstract class abs {

    protected int cx = 0, cy = 0;

    public void p() {
        System.out.print("hello");
    }
}

এটি নিশ্চিতভাবে কাজ করবে।


1

হ্যা, তুমি পারো. কখনও কখনও আপনি এই প্রশ্নটি জিজ্ঞাসা করতে পারেন যে এটি করার উদ্দেশ্য কী? উত্তরটি হ'ল: কখনও কখনও আমাদের নিজের দ্বারা ক্লাসটি ইনস্ট্যান্ট করা থেকে সীমাবদ্ধ করতে হয়। সেক্ষেত্রে আমরা চাই যে ব্যবহারকারীরা আমাদের বিমূর্ত শ্রেণিটি প্রসারিত করুন এবং শিশু ক্লাসটি ইনস্ট্যান্ট করুন


1

আপনি পারবেন, আমার মনে প্রশ্নটি আপনার উচিত। ঠিক প্রথম থেকেই, আমি বলব যে এর কোনও কঠোর এবং দ্রুত উত্তর নেই। আপনার বর্তমান পরিস্থিতির জন্য সঠিক কাজ করুন।

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

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

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


1

আসলে কোনও বিমূর্ত শ্রেণীর কোনও বিমূর্ত পদ্ধতি না থাকলে এর কোনও অর্থ নেই। একটি বিমূর্ত শ্রেণি বাবার মতো। এই বাবার কিছু বৈশিষ্ট্য এবং আচরণ রয়েছে, যখন আপনি শিশু হিসাবে পিতার সন্তান হতে চান, পিতা বলেন সন্তানের (আপনি) অবশ্যই এটি হওয়া উচিত, এটি আমাদের মোটো এবং আপনি যদি না করতে চান তবে আপনি আমার ছেলে না।

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