[Java] Классы. static и abstract
static
Иногда требуется создать метод, который можно было бы использовать вне какого-либо объекта.
Статические методы могут непосредственно обращаться только к другим статическим методам, в них ни в каком виде не допускается использование ссылок this и super.
Внутри статических методов недопустимы ссылки на не статические переменные объекта.
Переменные также могут иметь тип static, они подобны глобальным переменным, то есть доступны из любого места кода.
class Static {
static int a = 3;
static int b = 4;
static void method(int x) {
System.out.println("x = " + x);
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
Вызываем без создания экземпляра класса
Static.method(42);
System.out.println("StaticClass.b = " + Static.b);
Результат запуска этой программы
x = 42 a = 3 b = 4 StaticClass.b = 4
abstract
Бывают ситуации, когда нужно определить класс, в котором задана структура какой-либо абстракции, но полная реализация всех методов отсутствует. В таких случаях вы можете с помощью модификатора типа abstract объявить, что некоторые из методов обязательно должны быть замещены в подклассах. Любой класс, содержащий методы abstract, также должен быть объявлен, как abstract. Поскольку у таких классов отсутствует полная реализация, их представителей нельзя создавать с помощью оператора new. Кроме того, нельзя объявлять абстрактными конструкторы и статические методы. Любой подкласс абстрактного класса либо обязан предоставить реализацию всех абстрактных методов своего родителя, либо сам должен быть объявлен абстрактным.
abstract class A {
abstract void callme();
void metod() {
System.out.println("Inside A's metoo method");
}
}
class B extends A {
void callme() {
System.out.println("Inside B's callme method");
}
}
class Abstract {
public static void main(String args[]) {
B b = new B();
b.callme();
b.metoo();
}
}
Нет обратных ссылок на эту запись.
Сентябрь 25th, 2012 - 19:35
Почему в первом примере b=12?!
Сентябрь 26th, 2012 - 10:28
Ошибся. Поправлю.