В чем разница между переопределение и затенения, в частности, к этому утверждению «Статический метод не может быть переопределен в подклассе, только слежка»Override против Shadowing в Java
ответ
Если вы действительно переопределяется метод, вы можете вызовите super()
в какой-то момент, чтобы вызвать реализацию суперкласса. Но так как методы static
принадлежат классу, а не экземпляру, вы можете «тенеизировать» их, предоставляя метод с той же сигнатурой. Статические члены любого типа не могут быть унаследованы , так как к ним необходимо получить доступ через класс.
** Статические ** члены могут быть доступны через экземпляр объекта, используя ** this.staticVariable **, но считается плохой практикой. – NoName
Переопределение ... Этот термин относится к полиморфному поведению, например,
class A {
method(){...} // method in A
}
class B extends A {
@Override
method(){...} // method in B with diff impl.
}
При попытке вызова метода из класса B вы получите переопределенная behvaior ..eg
A myA = new B();
myB.method(); // this will print the content of from overriden method as its polymorphic behavior
, но предположим, что вы объявили метод со статическим модификатором, чем пытаться один и тот же код
A myA = new B();
myA.method(); // this will print the content of the method from the class A
это статические методы, основанные на методе Beacuse, не могут быть переопределены ... метод класса B просто затеняет метод из класса A ...
2-й код: 'myB.method();' => Я думаю, что это опечатка, вы имели в виду 'myA.method();'? – jordom
- 1. Имя Скрытие против OVERRIDE
- 2. JAVA - Override
- 3. toString Override в Java
- 4. «@Override» в Java
- 5. C++ shadowing variable name
- 6. Citrix session remote shadowing
- 7. Config Property Shadowing
- 8. Shadowing getFilesDir() в Robolectric 3
- 9. Shadowing UITextview как UITextField
- 10. Shadowing static method
- 11. Проблемы с box-shadowing
- 12. Свойство C# явно задано против override get
- 13. Override Java конструктор в Scala
- 14. Что делает @Override в Java?
- 15. Override Process Class в Java
- 16. Как работает @override в java
- 17. Отсутствует @Override в Java библиотек
- 18. Когда использовать @Override в Java
- 19. Java: Override protected String
- 20. @Override Java Родитель класса
- 21. Java Swing paintComponent() override
- 22. Java override compareTo, Long
- 23. Простой Java Override Определение
- 24. Java: Принуждение Не Override
- 25. Java - статический метод override
- 26. Shadowing `this` - лексическое разрешение имени
- 27. Shadowing TimeZone.getDefault с использованием Robolectric
- 28. go variable scope и shadowing
- 29. Weird shadowing при изменении текста JLabel
- 30. Как DeviantArt реализовал Shadowing в своих изображениях?
На самом деле это называется [скрывается] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.8), а не затенением. – assylias
Затенение (по крайней мере, в моем опыте), которое вы используете, чтобы прерывания на микроконтроллере не зависали нить, выполняемая в то время. Теневые регистры обновляются каждый раз, когда реальные изменения изменяются в основном потоке, но прекращают обновление, когда его микроконтроллер прерывается, поэтому регистры могут быть восстановлены из них при выходе из процедуры прерывания. – AJMansfield
хорошо, есть затенение, затенение и скрытие ... но он прав в том, что одно связанное наследство скрывается. Скрытие происходит, когда статический член в подклассе скрывает один в суперклассе. Спецификация заявляет: Если класс объявляет статический метод m, то говорят, что объявление m скрывает любой метод m ', где сигнатура m является поднаклейкой (§8.4.2) сигнатуры m', в суперклассах и суперинтерфейсах класса, которые в противном случае были бы доступны для кода в классе. – Rafael