barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

четверг, 5 апреля 2012 г.

Перегрузка статических методов в Java

Статические методы в Java не перегружаются. При объявлении в производном классе метода, который должен бы перегрузить метод базового класса, происходит лишь "скрытие" базового метода, т.е. то, какой метод из статических методов будет вызван, зависит от типа переменной, а не от того, на объект какого класса она указывает (как с невиртуальными методами в C++). Например:
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");
     }
 }

class Test {
     public static void main(String[] args) {
         Foo f = new Bar();
         f.instanceMethod();
         f.classMethod();
     }
 }
выведет:
instanceMethod() in Bar
classMethod() in Foo
Спасибо http://www.coderanch.com/how-to/java/OverridingVsHiding.

1 комментарий:

  1. Все перепутано! Перегрузка и переопределение - это разные вещи! Перегружать статические методы можно, а вот с переопределением возникнут трудности

    ОтветитьУдалить