Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подклассы и одинаковые методы 
:(
    Опции темы
ressac
Дата 18.1.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



Код

public class Base {

    int x = 0;

    public void f() {
        System.out.println("f() : clase base !");
    }

    public void g() {
        System.out.println("g() : clase base !");
    }
}


Код

public class Derivada1 extends Base {

    int x = 1;

    @Override
    public void f() {
        System.out.println("f() : clase derivada 1 !");
    }

    @Override
    public void g() {
        System.out.println("g() : clase derivada 1 !");
    }
}


Код

public class Derivada2 extends Base {

    int x = 2;

    @Override
    public void f() {
        System.out.println("f() : clase derivada 2 !");
    }

    @Override
    public void g() {
        System.out.println("g() : clase derivada 2 !");
    }
}


Код

public class Anula {

    public static void main(String[] args) {
        Base b = new Base();
        Derivada1 d1 = new Derivada1();
        Derivada2 d2 = new Derivada2();

        Base p = b;
        System.out.println(p.x);
        p.f();
        p.g();

        p = d1;
        System.out.println(p.x);
        p.f();
        p.g();

        p = d2;
        System.out.println(p.x);
        p.f();
        p.g();
    }
}


получаю я вот это 

0
f() : clase base !
g() : clase base !
0
f() : clase derivada 1 !
g() : clase derivada 1 !
0
f() : clase derivada 2 !
g() : clase derivada 2 !

так вот я не пойму почему атрибут всегда показан правильно, тойсть атрибут отца.
а методы вызываются подклассов. я ведь не делаю кастинг ((Derivada1)p).f(); или ((Derivada2)p).f();

пожалуйста расталкуйте наглядно, спасибо!
PM MAIL   Вверх
rygel
Дата 18.1.2009, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 21.9.2007
Где: Харьков

Репутация: 6
Всего: 7



поля объекта в полиморфизме не участвуют
PM MAIL   Вверх
ressac
Дата 18.1.2009, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



rygel, но если я добавлю только метод "Н" например в один из под классов , то это метод я ни как не смогу вызвать из базового класса.
PM MAIL   Вверх
rygel
Дата 18.1.2009, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 21.9.2007
Где: Харьков

Репутация: 6
Всего: 7



да, не сможешь, если необходимо использовать методы подкласса то и используй работая с объектом подкласса ссылку типа подкласса
PM MAIL   Вверх
ressac
Дата 18.1.2009, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



rygel, тогда почему в первом случае это прокатывает? я имею в виду методы g и f
PM MAIL   Вверх
rygel
Дата 18.1.2009, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 21.9.2007
Где: Харьков

Репутация: 6
Всего: 7



дык только что ведь этот вопрос обсуждался

http://forum.vingrad.ru/forum/topic-238762.html
PM MAIL   Вверх
ressac
Дата 19.1.2009, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



rygel, да причём тут динамический биндинг? smile туту вообще другая структура вроде smile

эх, опять 23 %)
PM MAIL   Вверх
Hroft
Дата 21.1.2009, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 20.10.2003
Где: Москва

Репутация: 1
Всего: 3



ressac, удивительно, если честно. Тебе все четко пишут, а ты не желаешь читать.
Все методы в java виртуальные. Поля виртуальными не бывают. Ты обращаешься к полю базового класса. С какой стати там должно выводиться что-то еще, кроме значения поля в экземпляре базового класса? И как тут может быть ни при чем "динамический биндинг", если пример как раз на это?

Это сообщение отредактировал(а) Hroft - 21.1.2009, 18:47
PM MAIL ICQ   Вверх
ressac
Дата 27.1.2009, 04:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



я просто новичок, а вы сразу накинулись.
PM MAIL   Вверх
math64
Дата 27.1.2009, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Код

class Base {
int x = 0;
int getX() { return x; }
void setX(int x) { this.x = x }
}
class Derivada extends Base {
int x = 1;
int getX() { return x; }
void setX(int x) { this.x = x }
}
public class Main {
public static void main(String[] args) {
Base b = new Base();
System.out.println("Base:"+b.getX());
Base b = new Derivada();
System.out.println("Derivada:"+b.getX());
}
}

Вывод:
Код

Base:0
Derivada:1

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1115 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.