public class Test
{
    public static void main(String[] args)
    {
        A a = new C();
        a.myMethod(new Integer(121));

        B b = new C();
        b.myMethod(new Integer(121));

        C c = new C();
        c.myMethod(new Integer(131));
    }
}
abstract class A
{
    abstract void myMethod(Number N);
}

interface B 
{
    void myMethod(Object O);
}

class C extends A implements B
{
    void myMethod(Number N)
    {
        System.out.println("number");
    }

    public void myMethod(Object O)
    {
        System.out.println("Object");
    }
}

আউটপুটঃ 
number
Object
number

আমার হিসাবে আউটপুট number, number, number হওয়ার কথা। মাঝে object প্রিন্ট হইলো কিভাবে?

asked 11 Aug, 14:52

sksuranjit's gravatar image

sksuranjit
9513


আপনি অবজেক্ট C কে অবজেক্ট B তে কাস্ট করতেছেন এই জন্য এই রকম আউটপুট দিচ্ছে। আপনি জাভাতে অটোমেটিক কাস্টিং নিয়ে পড়াশুনা করতে পারেন।

ধন্যবাদ।

permanent link

answered 11 Aug, 18:56

menon's gravatar image

menon
4.8k743

1

আমি আপনার উত্তর টা পরিষ্কার ভাবে বুঝি নাই। অটো কাস্টিং বলতে আপনি কি পলিমরফিজম এর কথা বলতেছেন?

যদি পলিমরফিজম এর কথা বলেন, আপনি এমন একটা টিউটোরিয়াল এর লিঙ্ক দিতে পারবেন যেইটা থেকে পড়লে আমি আমার না বোঝার সমস্যা ধরতে পারবো।

যদি পলিমরফিজম এর কথা না বলেন, কাস্টিং নিয়ে এমন একটা টিউটোরিয়াল এর লিঙ্ক দেন যেইটা পড়লে আমি এইটা বুঝতে পারবো।

আর যদি সম্ভব হয়, আপনি এই কোডের B b = new C() এই লাইন থেকে কিভাবে কাজ করতেছে বুঝায় বললে কৃতজ্ঞ থাকবে।

(12 Aug, 04:00) sksuranjit
(13 Aug, 03:16) menon

আপনি সম্ভবত লিঙ্কের লেখা টা চেক করেন নাই। প্রিমিটিভ টাইপের ভালু কিভাবে কাস্টিং হয় বা করতে হয় ঐটা তো জানি।

যদি আপনার হাতে সময় থাকে, কোড টা কিভাবে কাজ করতেছে তাই বললে বুঝতে পারতাম।

(14 Aug, 15:15) sksuranjit

There are not different between primitive type and custom type

(14 Aug, 15:20) menon

আমি এখনও সমাধান পাই নাই।

আমি বলি, আমি কিভাবে বুঝি B b = new C(); এই লাইন থেকে।

পলিমরফিজম অনুযায়ী, সুপার টাইপের ভ্যারিয়েবল সাবটাইপের অবজেক্টের রেফারেন্সে রাখতে পারে।

এইখানে B সুপার টাইপ, C সাবটাইপ। B টাইপের ভ্যারিয়েবল b, C টাইপের অবজেক্টের রেফারেন্স রাখছে।

আর এইখানে, ডিক্লেয়ার টাইপ হচ্ছে B, অ্যাকচুয়াল টাইপ C.

(15 Aug, 09:23) sksuranjit

b.myMethod(new Integer(121));

যখন প্রোগ্রাম টা রান করবো, কম্পাইল টাইমে চেক হবে, ডিক্লেয়ার টাইপ B তে myMethod মেথড আছে কিনা।

হ্যা আছে।

রান টাইমে myMethod মেথড কল হবে অ্যাকচুয়াল টাইপ C এর উপর ভিত্তি করে।

C তে myMethod আছে। রান টাইমে ক্লাস C এর myMethod মেথড কল হবে।

কিন্তু ক্লাস C তে ২ টা ওভারলোডেড myMethod মেথড আছে।

২ টার ভিতরে void myMethod(Number N) এইটা হচ্ছে মোর স্পেসিফিক মেথড। তাই এই মেথড টা কল হবে আর প্রিন্ট হবে Number যেভাবে বাকি ২ টা myMethod কল Number প্রিন্ট করছে।

আমার এই হিসাবে ৩ বার ই Number প্রিন্ট হওয়ার কথা ছিলো।

(15 Aug, 09:23) sksuranjit
showing 5 of 6 show 1 more comments
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×215

question asked: 11 Aug, 14:52

question was seen: 146 times

last updated: 15 Aug, 09:23