2014-10-28 1 views
0

Например, если у нас было:Смутно о модификаторах полей?

package a; 

public class A { 
    private int moo 
    protected int cow 
    int spot; 
public A() { 
} 
} 

и ...

package p; 
Import p.A; 
public class C extends A { 
    int what; 
public C (A a) { 
what = cow; 
what = spot; 
} 
} 

Так почему же, что = место справедливо и то, что = место не действует? (или, по крайней мере, согласно моим примечаниям, что = пятно недействительно.)

+1

(Где объявлен 'zoo'?) См. Также http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html – Radiodef

+0

@Radiodef, который является мнимым термином ... который на самом деле должен быть корова, я исправлю это и свои извинения. – user69001

+0

'import' написан в нижнем регистре. –

ответ

0

В вашем коде нет переменной zoo. Во всяком случае ..

Поскольку класс A находится в пакете a, класс C в пакете p, C не может получить доступ к пакету-частной переменной spot. Если вы хотите, чтобы spot был доступен путем расширения классов, измените его модификатор доступа на protected.

+0

Извините, что объект зоопарка был моментом oops ... Итак, если переменная не получает модификатора, она автоматически закрыта для элементов вне пакета? – user69001

+0

да, это правильно. только те, которые находятся в одном пакете, могут получить к нему доступ напрямую. То же самое касается пакетов-частных методов. – Sergio

+0

О, я вижу спасибо. – user69001

0

spot, имеющий видимость по умолчанию, не виден ни одному классу, кроме его собственного пакета, то есть package a.

Смотреть подробнее здесь: Visibility Modifiers

0

Сво простой вопрос модификатор доступа и это то, что модификатор доступа по умолчанию для и отделяет его от других. Если задана переменная Доступ по умолчанию, тогда она доступна только в том же пакете. Даже если вы расширяете класс в другом пакете.