Если у меня есть классовое созвездие в Scala, подобное этому:
class A { def foo() = "bar" } class B extends A { override def foo() = "BAR" } class C extends B { }
Возможно ли в классе C явно вызвать метод foo, который был определен в A?
Нет, но вы можете сделать нечто похожее с множественным наследованием признаков:
trait A { def foo = "from A" } class B extends A { override def foo = "from B" } class C extends B with A { val b = foo // "from B" val a = super[A].foo // "from A" }
Нет, вы не можете, потому что это нарушает инкапсуляцию. Вы обходите поведение своих родителей, поэтому предполагается, что C расширяет B, но вы обходите это.
Пожалуйста, посмотрите на отличный ответ Джона Скитса на тот же вопрос Почему это super.super.method (); не разрешено в Java? .
Обратите внимание, что вы можете получить доступ к полю с помощью отражения, но вы не хотите этого делать.
Нет.И я бы оставил это на этом, но, очевидно, ТАК хочет, чтобы я продолжал набирать 30 символов.