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

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

1 پاسخ

+4 امتیاز
قبل توسط (1.1هزار امتیاز)

بدلیل اینکه متد های استاتیک در جاوا به اشیاء ساخته شده از یک کلاس تعلق ندارند و اصطلاحا متد های در سطح کلاس هستند و نمی توان آنها را در کلاس فرزند 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

سوالات مشابه

+1 امتیاز
1 پاسخ 692 بازدید
+1 امتیاز
1 پاسخ 1.0هزار بازدید
0 امتیاز
1 پاسخ 767 بازدید
+3 امتیاز
1 پاسخ 1.9هزار بازدید
0 امتیاز
4 پاسخ 1.8هزار بازدید
سوال شده 7 سال قبل در برنامه نویسی توسط ali-nb (10 امتیاز)
0 امتیاز
1 پاسخ 453 بازدید
+2 امتیاز
1 پاسخ 967 بازدید
...