چرا نمی توان در جاوا متد های استاتیک را override کرد؟

+1 رأی
میانگین بازدید روزانه 0.36759 بازدید

چرا نمی توان در جاوا متد های استاتیک را override کرد اما در زبان هایی مانند Scala یا Objective-C این کار امکانپذیر است؟

سوال 5 سال قبل در تالار برنامه نویسی توسط Saeed Zarinfam (423 امتیاز)
ویرایش 2 سال قبل توسط Saeed Zarinfam

1 جواب

+4 رأی

بدلیل اینکه متد های استاتیک در جاوا به اشیاء ساخته شده از یک کلاس تعلق ندارند و اصطلاحا متد های در سطح کلاس هستند و نمی توان آنها را در کلاس فرزند override کرد و اگر یک متد استاتیک در کلاس فرزند دقیقا با همان امضای متد کلاس پدر وجود داشته باشد خطایی رخ نمی دهد و برنامه بدرستی کامپایل می شود.

class Foo {
    public static void classMethod() {
        System.out.println("classMethod() in Foo");
    }

    public void instanceMethod() {
        System.out.println("instanceMethod() in Foo");
    }
}

class Bar extends Foo {
    public static void classMethod() {
        System.out.println("classMethod() in Bar");
    }

    public void instanceMethod() {
        System.out.println("instanceMethod() in Bar");
    }
}

در این موارد گفته می شود کد متد فرزند متد پدر را hide کرده است و به این کار override گفته نمی شود چون هنوز متد کلاس پدر در سطح همان کلاس قابل دسترسی است.

اگر کد زیر را اجرا کنیم:

class Test {
    public static void main(String[] args) {
        Foo f = new Bar();
        f.instanceMethod();
        f.classMethod();
    }
}

خروجی زیر را مشاهده خواهیم کرد:

instanceMethod() in Bar
classMethod() in Foo
جواب 5 سال قبل توسط Saeed Zarinfam (423 امتیاز)

سوال های مشابه

+1 رأی
1 جواب میانگین بازدید روزانه 0.23241 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.27388 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.16365 بازدید
+3 رأی
1 جواب میانگین بازدید روزانه 0.451,076 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.1250 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.12191 بازدید
0 رأی
4 جواب میانگین بازدید روزانه 0.46475 بازدید
سوال 2 سال قبل در تالار برنامه نویسی توسط ali-nb (10 امتیاز)
+1 رأی
1 جواب میانگین بازدید روزانه 0.26204 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.11211 بازدید
+2 رأی
1 جواب میانگین بازدید روزانه 0.5866 بازدید
کانال تلگرام جواب یاب
...