2015-02-16 7 views
6

powiedzmy masz klasy abstrakcyjnej:Czy możesz zadeklarować atrybut jako prywatny w klasie abstrakcji?

abstract class PersonAbstract 
{ 
    private $name = "Stack Overflow"; 
} 

Czy to jest legalne zadeklarować atrybut jako prywatnej wewnątrz klasy abstrakcyjnej? Lub fakt, że ta klasa powinna zostać rozszerzona, minimalna widoczność jest chroniona?

+1

Nie PHP, ale myślę, że to może być legalne i sensowne tak długo, jak masz co najmniej jedną metodę w PersonAbstract, które używają zmiennej. – AFract

+2

Tak, jest to zgodne z prawem. Chociaż klasa jest "abstrakcyjna", klasy, które z niej wyprowadzają, mogą nadal wywoływać swoje metody "chronione/publiczne", te metody * do * mają dostęp do zmiennej 'private'. – haim770

+0

@Anas Możesz zadeklarować prywatny atrybut, ale nie możesz uzyskać do niego dostępu w rozszerzonej klasie. – Whirlwind

Odpowiedz

8

Tak, możesz mieć prywatne pole w klasie abstrakcji. To pole będzie dostępne tylko dla funkcji w obrębie tej klasy abstrakcyjnej. Wszelkie klasy dziedziczące po klasie abstrakcyjnej nie będą miały dostępu do pola.

Możesz zadeklarować zarówno pola, jak i funkcje jako publiczne, chronione lub prywatne w ramach klasy abstrakcji. Jeśli pole lub funkcja jest publiczna, jest dostępna dla każdego. Jeśli jest on chroniony, jest dostępny tylko dla tej klasy i dowolnych klas dziedziczących po tej klasie. Jeśli jest prywatny, jest dostępny tylko dla tej klasy.

Funkcje abstrakcyjne muszą być implementowane przez klasę dziedziczącą, więc nie ma sensu (i prawdopodobnie nie będzie działać), aby mieć prywatną funkcję abstrakcyjną.

+0

Dziękuję za wyjaśnienia. –