powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / final переменная
6 сообщений из 6, страница 1 из 1
final переменная
    #33684203
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясните плиз ситуацию - типа тест

public class A {
protected final static String A= "A";
public String getA() {
return A;
}

//это не компилиться:

// public void setA(String a) {
// A = a;
// }
}


class B extends A {
static String A = "B";
public String getA() {
return A;
}

//а это компилиться:
public void setA(String a) {
A = a;
}
}
class Dispatch {
public static void main(String args[]) {
A a = new B();
System.out.println(" a.getA() = " + a.getA());
}
}

и результат

a.getA() = B
Я чтото не понял - объявлением static String A = "B"; в классе B мы не переопределяем protected final static String A= "A"; класса A?
И кроме того легко меняем final переменную класса A в методе B.setA?
...
Рейтинг: 0 / 0
final переменная
    #33684212
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вы же методо getA() переопределили...
...
Рейтинг: 0 / 0
final переменная
    #33684322
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но ведь переменная A final - и она переопределена в классе B - или если объявить
в наследуемом классе такую же переменную, то это не переопределение, и при инициализация A a = new B() ; в объекте а - который фактически объект класса B -
мы видим все методы переопределенные, то есть класса B, а переменные по-прежнему класса A? То есть вообще можно protected final static String A= "A";
переопределить так static String A = "B"; в дочернем классе?
...
Рейтинг: 0 / 0
final переменная
    #33684324
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переменную "переопределить" нельзя, этой возможностью обладают только не private, не static и не final методы класса
...
Рейтинг: 0 / 0
final переменная
    #33684432
osonНо ведь переменная A final - и она переопределена в классе B - или если объявить
в наследуемом классе такую же переменную, то это не переопределение, и при инициализация A a = new B() ; в объекте а - который фактически объект класса B -
мы видим все методы переопределенные, то есть класса B, а переменные по-прежнему класса A? То есть вообще можно protected final static String A= "A";
переопределить так static String A = "B"; в дочернем классе?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
 public   class  A {
    String name = "A";
     public  String getName() {
         return  name;
    }
}

 public   class  B  extends  A {
    String name = "B";
     public  String getName() {
         return  name;
    }
     public  String getSuper() {
         return   super .name;
    }
}

System.out.println( new  A().name);
System.out.println( new  B().name);
System.out.println(((A) new  B()).name);

System.out.println( new  A().getName());
System.out.println( new  B().getName());
System.out.println(((A) new  B()).getName());

System.out.println( new  B().getSuper());

A
B
A

A
B
B

A
Переменная A#name не переопределяется в классе B, а просто скрывается. В отличие от методов, обращения к переменным не являются вируальными.
...
Рейтинг: 0 / 0
final переменная
    #33688894
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / final переменная
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]