+2 امتیاز
قبل در برنامه نویسی توسط (467 امتیاز)
ویرایش شده قبل توسط

سلام. لطفا به کد زیر توجه کنید:

package com.jetbrains;

class Parent {
}

class Child extends Parent {
}

public class Main {

    public static void main(String[] args) {
        Parent parent = new Parent();
        /*Parent parent1 = new Child();
        Child child = new Child();*/

        if (Parent.class.getClass().equals(Parent.class.getClass())) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }

        if (Parent.class.getClass().equals(parent.getClass())) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }

    }
}

خروجی برنامه‌ی بالا به ترتیب میشه: true و false.

اما نکته‌ای که ذهن من و مشغول کرده اینه که در دستور شرطی اول، همانطور که مشاهده می‌کنید به شکل زیر آبجکت کلاس Parent و با خودش مقایسه کردم:

Parent.class.getClass().equals(Parent.class.getClass())

اما در دستور شرطی دوم، از متد ()getClass که بر روی آبجکت کلاس اجرا میشه برای به دست آوردن آبجکت کلاس استفاده کردم. به شکل زیر:

Parent.class.getClass().equals(parent.getClass())

یعنی دوباره من می‌خواستم در دستور شرطی دوم، آبجکت کلاس Parent و با خودش مقایسه کنم. اما این بار جواب false برگردونده میشه. امکانش هست علت و توضیح بدین؟ ممنون.

1 پاسخ

+3 امتیاز
قبل توسط (365 امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

سؤال جالبی است.

دقت کنید: Parent.class خودش یک class object متناظر با کلاس Parent است که دقیقاً با parent.getClass یکی است. هر دوی اینها (Parent.class و parent.getClass) شیءهایی از نوع Class هستند که اطلاعاتی درباره کلاس Parent را نگهداری میکنند. پس اگر روی هر کدام از این دو شیء، متد getClass را صدا کنید، به یک class object دیگر میرسید که اطلاعات کلاس Class را نگه می‌دارد.

برای توضیح بیشتر، کد زیر را با دقت ببینید و اجرا کنید:


class Parent {}
 
public class Temp1 {
    public static void main(String[] args) {
        Parent parent = new Parent();
        
        System.out.println(Parent.class);
        System.out.println(parent.getClass());
        
        System.out.println(Parent.class.getClass());
        System.out.println(parent.getClass().getClass());
        
        System.out.println(parent.getClass().equals(Parent.class));
        System.out.println(parent.getClass().getClass().equals(Parent.class.getClass()));
        System.out.println(parent.getClass().equals(Parent.class.getClass()));
        System.out.println(parent.getClass().getClass().equals(Parent.class));
 
 
    }
}
قبل توسط (467 امتیاز)
خیلی ممنون از شما. به نکات خیلی خوبی اشاره کردین.

سوالات مشابه

0 امتیاز
1 پاسخ 737 بازدید
+1 امتیاز
1 پاسخ 1.3هزار بازدید
0 امتیاز
1 پاسخ 541 بازدید
+2 امتیاز
2 پاسخ 5.2هزار بازدید
سوال شده 11 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
0 امتیاز
1 پاسخ 529 بازدید
...