Записки программиста Программирование и не только

25Сен/122

[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();
    }
}
Комментарии (2) Пинги (0)
  1. Почему в первом примере b=12?!


Leave a comment

Нет обратных ссылок на эту запись.