[Java] Классы. static и abstract
static
Иногда требуется создать метод, который можно было бы использовать вне какого-либо объекта.
Статические методы могут непосредственно обращаться только к другим статическим методам, в них ни в каком виде не допускается использование ссылок this
и super
.
Внутри статических методов недопустимы ссылки на не статические переменные объекта.
Переменные также могут иметь тип static
, они подобны глобальным переменным, то есть доступны из любого места кода.
1 2 3 4 5 6 7 8 9 | 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); } } |
Вызываем без создания экземпляра класса
1 2 | Static.method( 42 ); System.out.println( "StaticClass.b = " + Static.b); |
Результат запуска этой программы
1 2 3 4 | x = 42 a = 3 b = 4 StaticClass.b = 4 |
abstract
Бывают ситуации, когда нужно определить класс, в котором задана структура какой-либо абстракции, но полная реализация всех методов отсутствует. В таких случаях вы можете с помощью модификатора типа abstract
объявить, что некоторые из методов обязательно должны быть замещены в подклассах. Любой класс, содержащий методы abstract
, также должен быть объявлен, как abstract
. Поскольку у таких классов отсутствует полная реализация, их представителей нельзя создавать с помощью оператора new
. Кроме того, нельзя объявлять абстрактными конструкторы и статические методы. Любой подкласс абстрактного класса либо обязан предоставить реализацию всех абстрактных методов своего родителя, либо сам должен быть объявлен абстрактным.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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
Ошибся. Поправлю.