2014-12-10 3 views
0

Является ли доступность видимости неявных унаследованных методов (абстрактных конечных методов родительского характера, унаследованных от детей) всегда одинаковой при доступе через дочерний элемент?Наследование наследования: на конечных методах в абстрактных классах

Каковы подразумеваемые правила пересылки?

class package0.Parent {ACCESS_MODIFIER final void f();} 
class package1.B extends A { /* Implicit f?*/} 
class package2.C extends B {/* Implicit f? */} 

Тогда: Будет ли всегда отправлен ? Если да, то почему случай 1 ?. А как насчет случая 3?

  • Случай 1: Если родитель f() является private видимость не передается, так как B не может видеть его.
  • Случай 2: Если родитель f() - public, я думаю, что у кого-то, кто использует B или C, будет наличие на f.
  • Дело 3: Если родитель f() is protected, я думаю, что B будет «раскрывать» метод как защищенный, что означает, что C может его увидеть.
+1

Трудно понять, что вы имеете в виду здесь - в частности, «окончательная» абстракция. Короткий, но полный фрагмент * кода * с подходящими вопросами для того, что неясно для вас, сделало бы намного легче ответить на вопрос. –

+0

Улучшенная формулировка, извините – Whimusical

+0

Это все еще не совсем ясно, что означает «переадресованный». JLS 6.6, вероятно, лучший ресурс здесь: http://docs.oracle.com/javase/specs/jls/se8/html/jls-6.html#jls-6.6 –

ответ

0

Ваша формулировка нечеткая. Образом я интерпретации ваш вопрос:

class A{protected void f();} 
class B extends A{/* Can see f. */} 
class C extends B{/* Can see f? */} 

Если да, то ответ да: C будет иметь возможность доступа к f.