[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
Ошибся. Поправлю.