Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прикладне програмування.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
448.52 Кб
Скачать

2.2. Опис методу getClass()

У Java відсутнє множинне спадкування. Кожен клас може мати тільки одного батька. Таким чином, ми можемо простежити ланцюжок успадкування від будь-якого класу, піднімаючись усе вище. Існує клас, на якому такий ланцюжок завжди закінчується, це клас Object. Саме від нього успадковуються всі класи, в оголошенні яких явно не зазначений інший батьківський клас. А значить, будь-який клас безпосередньо або через своїх батьків є спадкоємцем Object. Звідси випливає, що методи цього класу є у будь-якого об'єкта (поля у Object відсутні), а тому вони становлять особливий інтерес.

Метод getClass() використовується для доступу до класу об'єкта під час виконання. Метод getClass() представлений в java.lang.Object, тому у будь-якого об'єкта в Java можна запитати його клас. getClass() повертає об'єкт класу java.lang.Class. getClass() один з основних методів. Цей метод повертає об'єкт класу Class, який описує клас, від якого був породжений цей об'єкт. У нього є метод getName() , який повертає ім'я класу:

String s = "abc";

Class cl = s.getClass ();

print (cl.getName ());

Результатом буде рядок:

java.lang.String На відміну від оператора instanceof, метод getClass() завжди повертає точно той клас, від якого був породжений об'єкт.

2.3. Приклад використання об’єктів

Перехід на літній час з використанням класу Сalendar. Якщо поточна дата знаходиться між 2:00 останньої неділі березня і 3:00 останньої неділі жовтня, то час літній. Відзначу, що в перших реалізаціях Java для роботи з датами використовувався безпосередньо клас java.util.Date. Але вже давно більшість його методів позначені як deprecated, тобто їх використання потрібно по максимуму уникати і задіяти набагато більш гнучкий Calendar.

import java.util.Calendar;

import java.util.Date;

...

private static Calendar cldr;

private static boolean summerTime;

static{

cldr = Calendar.getInstance();

cldr.setTimeZone(TimeZone.getTimeZone("Europe/Moscow"));

Calendar c = (Calendar)cldr.clone();

c.set(c.MONTH, c.MARCH);

c.set(c.HOUR_OF_DAY, 2);

for(int i = 31; i > 0; i--){

c.set(c.DAY_OF_MONTH, i);

if(c.get(c.DAY_OF_WEEK) == c.SUNDAY) break;

}

Date inMarch = c.getTime();

c.set(c.MONTH,  c.OCTOBER);

c.set(c.HOUR_OF_DAY, 3);

for(int i = 31; i > 0; i--){

c.set(c.DAY_OF_MONTH, i);

if(c.get(c.DAY_OF_WEEK) == c.SUNDAY) break;

}

Date inOctober = c.getTime();

Date now = new Date();

summerTime =  now.after(inMarch) && now.before(inOctober);

 }  

public static boolean isSummerTime(){

return summerTime;

}

Наступна програма демонструє GetClass () (успадкований від Object) і etSuperclass () (з класу):

class X { int a; float b; }

class Y extends X { double c; }

class RTTI { public static void main(String args[]) { X x = new X(); Y y = new Y(); Class clObj; clObj = x.getClass(); // Отримати посилання на Class System.out.println("x – об’єкт типу: " + clObj.getName()); clObj = y.getClass(); // Отримати посилання на Class System.out.println("у – об’єкт типу: " + clObj.getName()); clObj = clObj.getSuperclass(); System.out.println("Суперклас у " + clObj.getName()); } }

Виведення цієї програми показано тут:

x – об’єкт типу: X y – об’єкт типу: Y Суперклас у: X

Отже, даний приклад використовується, щоб ​​визначати діє літній час чи ні.