Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
45 / 30 / 11
Регистрация: 31.10.2009
Сообщений: 200
1

Восходящее преобразование, объяснить код

01.07.2014, 07:48. Показов 3413. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!

Мне не понятен один момент в восходящем преобразовании. Есть два класса: один базовый, другой производный от базового. В обоих классах есть метод (в производном он перегружен). Так вот если создать объект базового класса и присвоить ему объект производного класса, то для созданного объекта выполняется перегруженная версия метода, а не базовая версия. Почему так?

вот простой пример:
Java
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
37
38
39
40
41
42
43
44
45
46
47
48
class Base
{
    @Override
    public String toString()
    {
        return "BaseString";
    }
 
    public void method()
    {
        System.out.println("BaseMethod");
    }
}
 
public class Main extends Base
{
    public static void main(String[] args)
    {
        Main m = new Main();
        m.method();
 
        Base b = new Base();
        b.method();
 
        Base t = new Main(); // восходящее преодразование, производый Main преодразуется в базовый Base.
        t.method(); // ПОЧЕМУ используется перегруженный метод производного класса
        // Тут все понятно, в базовом классе нет такого метода
        //!t.otherMethod(); 
        m.otherMethod();
    }
 
    @Override
    public String toString()
    {
        return "MainString";
    }
 
    @Override
    public void method()
    {
        System.out.println("MainMethod");
    }
 
    public void otherMethod()
    {
        System.out.println("otherMethodMain");
    }
}
Буду признателен, если ответите на мой нубский вопрос. Спасибо.

Добавлено через 3 часа 19 минут
Начал читать главу "полиморфизм". Стало немного проясняться. Как я понял при восходящем преобразовании усекается только интерфейс производного класса до интерфейса базового класса, а все перегруженные методы остаются. Это делается для того, например, чтобы какая-нибудь функция с аргументом типа базовый класс могла принимать все объекты производных классов. Иначе пришлось бы городить кучу функций с одинаковым по смыслу текстом, но с разными типами аргументов.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2014, 07:48
Ответы с готовыми решениями:

Восходящее преобразование
помогите пожайлуста разобраться, почему выдаёт ошибку... public class A{ public int...

Объяснить код
Всем добрый день. Есть код public class Dog { String name; public static void...

Объяснить код
Всем привет, может кто ни будь разъяснить мне этот код пожалуйста. А то я либо спёкся уже, или...

Объяснить код в массивах
Всем доброго дня, дана задача: 1. Создать массив на 10 строчек. 2. Ввести с клавиатуры 8 строчек...

2
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
01.07.2014, 10:47 2
Цитата Сообщение от _Eldar_ Посмотреть сообщение
Так вот если создать объект базового класса и присвоить ему объект производного класса
Создать переменную базового класса. Создание объекта - это вызов конструктора.
0
173 / 131 / 74
Регистрация: 04.12.2013
Сообщений: 552
01.07.2014, 13:45 3
_Eldar_, здесь все логично, нет?
Если метод базового класса не перекроете, вызовется он, иначе вызовется метод производного класса. В чем Вы ищите подвох? Все же понятно и просто =)
0
01.07.2014, 13:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2014, 13:45
Помогаю со студенческими работами здесь

Объяснить код метод getBytes()
Задание было Прочесть с консоли имя файла. и Считывать строки с консоли, пока пользователь не...

Нужно объяснить код оллимпиадной задачи
Есть олимпиадная задача: Группа программистов собралась в понедельник и на все свои деньги купила...

Потоки. Объяснить как работает код
Вот у меня есть код программы, которая создает два процесса. Первый генерирует ряд натуральных...

(dynamic_cast) Восходящее приведение типа.(объяснить принцип работы)
Вот восходящее приведение типа: class B { }; class C : public B { }; class D : public C { };...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru