Могу ли я иметь частные конечные поля в абстрактном классе - PullRequest
0 голосов
/ 31 августа 2011

Могу ли я создать абстрактный класс, как показано ниже?

abstract class A{
private final String    foo;
private final String    too;

public A(final String foo, final String too) {
    this.foo= foo;
    this.too= too;
}
public String getfoo(){
        return foo;
    }
public String gettoo(){
        return too;
    }
}

Ответы [ 4 ]

7 голосов
/ 31 августа 2011

Коротко: да.

Long (er): абстрактный класс - это просто класс, экземпляр которого не может быть создан как есть, так как части могут все еще отсутствовать. Таким образом, я могу иметь личные поля. Просто обратите внимание, что подклассы не имеют к ним доступа, кроме как через методы получения / установки.

1 голос
/ 31 августа 2011

Ваш код правильный.
Примечание. Хорошей практикой в ​​абстрактных классах является защищенный конструктор, экземпляр самого класса beacuse не может быть создан, и наследующие классы должны вызывать конструктор super(...).

0 голосов
/ 31 августа 2011

Да, вы можете.

Рассмотрите возможность сделать их protected вместо приватных, чтобы ваши подклассы, то есть те, которые расширяют этот класс, имели прямой доступ к полям.

0 голосов
/ 31 августа 2011

Да, конечно, возможно. Но это не очень хорошая практика, потому что вы не можете создать один объект этого класса. Главное, что вам также не нужен этот тип класса, потому что вы не определили внутри него никаких абстрактных функций. Но в соответствии с вашим вопросом вы определенно можете создать этот тип абстрактного класса.

...