0 / 0 / 0
Регистрация: 22.01.2021
Сообщений: 7

Перегрузка методов

14.02.2021, 17:43. Показов 6712. Ответов 53

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Народ, вопрос такой: можно ли private метод базового класса перегрузить public методом производного класса. Ответ нужен с технической точки зрения. Если да, можно ли это проверить (доказать)? Спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.02.2021, 17:43
Ответы с готовыми решениями:

Перегрузка методов
Помогите пожалуйста разобрать задание. Идет набор на курсы трактористов. Тех, кто имеет водительские права, берут сразу на 2...

Перегрузка методов
Я новичок и пытаюсь разобраться в перегрузках методов класса Sad Допустим есть класс X b childX наследущий его методы... Код: class X...

Перегрузка методов
Здравствуйте. Хочу осуществить перегрузку метода, но Eclipse выдаёт ошибку. public class Test { int a,b; void func(int c, int d){ ...

53
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.02.2021, 13:02
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Tavashi
Вызывается конструктор родителя, но сам инстанс родителя не создается
Конструктор вызывается, но объект не создается....
Ну-ну
0
16.02.2021, 13:24

Не по теме:

Цитата Сообщение от Tavashi Посмотреть сообщение
сам инстанс родителя не создается
Лол, что?

0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
16.02.2021, 13:38
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Конструктор вызывается, но объект не создается....
Объект потомка только создается. Хотелось бы увидеть опровержение в виде кода или ссылок.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
16.02.2021, 13:46
iSmokeJC, ну на самом деле все сложно. Т.е. не на самом деле, а насколько я понимаю )
В памяти объекта родителя и объекта наследника быть не должно. Должен быть один объект наследник, в котором будут все нужные поля из обоих классов. Но вот как там эта видимость проверяется, что-то я не вполне уверен.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.02.2021, 13:52
xoraxax, согласен. Возможно, объект таки создается с целью "получить" поля и методы для наследника, а потом грохается, т.к. на него нет ссылок...
Хз
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
16.02.2021, 14:50
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Возможно, объект таки создается с целью "получить" поля и методы для наследника, а потом грохается, т.к. на него нет ссылок...
Тогда, наверное, этот объект можно где-то увидеть, потому что сборщик явно не сразу его заберет.

Добавлено через 9 минут
Цитата Сообщение от iSmokeJC Посмотреть сообщение
объект таки создается с целью "получить" поля и методы для наследника
Зачем вообще для этого создавать объект, когда есть класс:
Java
1
2
3
4
5
6
7
8
9
10
11
12
class B {
    public B() {
        System.out.println("B class");
    }
 
}
 
class A extends B{
    public A() {
        System.out.println("A class");
    }
}
Java
1
2
3
public static void main(String[] args) {
        new A();
}
Code
1
2
3
4
5
6
java -verbose SomeTest
[Loaded B from file:/C:/...]
[Loaded A from file:/C:/...]
 
B class
A class
Добавлено через 38 минут
Цитата Сообщение от Arsegg Посмотреть сообщение
Лол, что?
Если исходить из того, что при создании инстанса класса потомка создаются также инстансы всех его классов предков, то хотелось бы получить объяснение этого кода:
Java
1
2
3
4
5
6
7
8
9
10
11
12
abstract class B {
    public B() {
        System.out.println("B class");
    }
 
}
 
class A extends B{
    public A() {
        System.out.println("A class");
    }
}
Java
1
2
3
public static void main(String[] args) {
            new A();
    }
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
16.02.2021, 14:51
О чем я и говорю. Грузятся оба класса. Происходит аллокация для одного объекта, в котором есть все поля из родителей в т.ч. Дальше вызываются конструкторы, которые работают с этим одним объектом.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
16.02.2021, 14:56
xoraxax, с этим не согласен Arsegg. Он намекает, что на каждого родителя создается свой инстанс и с ним согласен iSmokeJC.
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
16.02.2021, 15:19
Цитата Сообщение от Tavashi Посмотреть сообщение
то хотелось бы получить объяснение этого кода:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
abstract class B {
    public B() {
        // super() - вызывается неявно конструктор Object
        System.out.println("B class");
    }
 
}
 
class A extends B{
    public A() {
        // super() - вызывается неявно конструктор B
        System.out.println("A class");
    }
}
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
16.02.2021, 15:22
Arsegg, то, что вызывается конструктор это и так понятно. Вопрос в том, где, как и когда создается инстанс родительского класса при создании инстанса класса потомка. О чем был намек здесь.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
16.02.2021, 15:23
вот такое вот выдает jol, например
Code
1
2
3
4
5
6
7
8
9
10
11
com.xoraxax.Main$B object internals:
 OFFSET  SIZE   TYPE DESCRIPTION                               VALUE
      0     4        (object header)                           05 00 00 00 (00000101 00000000 00000000 00000000) (5)
      4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)
      8     4        (object header)                           8d 48 17 00 (10001101 01001000 00010111 00000000) (1525901)
     12     4    int A.a                                       10
     16     4    int B.a                                       11
     20     4        (loss due to the next object alignment)
Instance size: 24 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total
Process finished with exit code 0
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
16.02.2021, 15:27
Цитата Сообщение от Tavashi Посмотреть сообщение
когда создается инстанс родительского класса
При вызове конструктора............................ .................................
/upd
Наследник и есть предок. По крайней мере, поведение наследника не должно менять поведение супертипа (Liskov Substitution Principle), т. е. при касте наследника к типу предка - программа не должна ломаться.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
16.02.2021, 15:29
Цитата Сообщение от Arsegg Посмотреть сообщение
При вызове конструктора....
То есть вызов конструктора обязательно во всех случаях означает создание инстанса? В примере - создается инстанс абстрактного класса?
0
16.02.2021, 15:37

Не по теме:

Цитата Сообщение от Tavashi Посмотреть сообщение
То есть вызов конструктора обязательно во всех случаях означает создание инстанса? В примере - создается инстанс абстрактного класса?
Кури Javadoc... Мои полномочия все...

0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
16.02.2021, 17:13
Цитата Сообщение от Arsegg Посмотреть сообщение
По крайней мере, поведение наследника не должно менять поведение супертипа (Liskov Substitution Principle), т. е. при касте наследника к типу предка - программа не должна ломаться.
Не нужно путать принцип проектирования с техническими деталями реализации того или иного языка.

Классы и типы — не одно и то же, и нарушить принцип подстановки с помощью переопределения методов можно легко и непринуждённо.

К конструкторам же LSP и вовсе никакого отношения не имеет.
0
16.02.2021, 18:38

Не по теме:

Цитата Сообщение от korvin_ Посмотреть сообщение
Не нужно путать принцип проектирования с техническими деталями реализации того или иного языка.
Вы безусловно правы. Только в каком из моих сообщений вы увидели, что я смешал данные понятия?
Цитата Сообщение от korvin_ Посмотреть сообщение
Классы и типы — не одно и то же, и нарушить принцип подстановки с помощью переопределения методов можно легко и непринуждённо.
То, что можно - не значит, что нужно. Это как в поговорке: "C позволяет очень просто выстрелить себе в ногу. На C++ сделать это сложнее, но, когда вы это делаете, отрывает всю ногу". C++ меняем на Java - суть от этого не поменяется.
Наследовать от Вороны (class Raven {}) Стол (class Table extends Raven {}) можно, только возникнут большие вопросы (к написавшему такой "шедевр"). И будут (такие "программисты") потом спрашивать:
Цитата Сообщение от Tavashi Посмотреть сообщение
сам инстанс родителя не создается
- потому, что не понимают ООП (SOLID - это расширение принципов ООП, proof: Although they apply to any object-oriented design)
Цитата Сообщение от korvin_ Посмотреть сообщение
К конструкторам же LSP и вовсе никакого отношения не имеет.
Ясное дело.

0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
16.02.2021, 19:27
Цитата Сообщение от Arsegg Посмотреть сообщение
Только в каком из моих сообщений вы увидели, что я смешал данные понятия?
В том, в котором ты его привёл, отвечая на сугубо технический вопрос реализации объектов.

Цитата Сообщение от Arsegg Посмотреть сообщение
То, что можно - не значит, что нужно.
Это значит, что приплетать принцип проектирования к обсуждению технических деталей и механизмов языка — не уместно.

Цитата Сообщение от Arsegg Посмотреть сообщение
потом спрашивать:
сам инстанс родителя не создается
Не вижу здесь вопроса. А утверждение верное. Инстанс родителя не создаётся, почитай уже, как реализованы объекты. xoraxax даже пример привёл.

Цитата Сообщение от Arsegg Посмотреть сообщение
SOLID - это расширение принципов ООП
SOLID — это не расширение принципов ООП, а набор принципов, которые Мартин приплёл к ООП и собрал в красивую аббревиатуру, чтобы свои книги лучше продавать. При том, что все они неформальны (не имеют строгих и исчерпывающих определений, а следовательно являются предметом споров), частично дублируют друг друга и на практике чаще используются только в качестве вопроса на собеседовании.

Цитата Сообщение от Arsegg Посмотреть сообщение
Ясное дело.
Так зачем ты его сюда приплёл?
2
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
16.02.2021, 20:07
Цитата Сообщение от Arsegg Посмотреть сообщение
потому, что не понимают ООП (SOLID
Что?! Причем здесь еще SOLID? Ты приплел подстановки барбары лисков, теперь еще и солид? Я тебе задавал наводящие вопросы и что по твоей логике получается, что можно создавать инстанс абстрактного класса, но тебя даже это не смутило.
0
16.02.2021, 20:50

Не по теме:

Цитата Сообщение от korvin_ Посмотреть сообщение
в котором ты его привёл, отвечая на сугубо технический вопрос реализации объектов.
То, что ты не можешь (не хочешь) отделить зерна от "чревел" - проблемы сугубо твои.
Цитата Сообщение от korvin_ Посмотреть сообщение
Это значит, что приплетать принцип проектирования к обсуждению технических деталей и механизмов языка — не уместно.
Разговор шел об ООП: а именно о наследовании. Хочешь сказать, что теперь ООП не парадигма программирования? Парадигма программирования - это лишь концепция. Она не зависит от конкретной реализации в ЯП.
Цитата Сообщение от korvin_ Посмотреть сообщение
Инстанс родителя не создаётся, почитай уже, как реализованы объекты.
Т. е. ты хочешь сказать, что память под поля и методы предка не выделяется при создании объекта-наследника?
Цитата Сообщение от korvin_ Посмотреть сообщение
SOLID — это не расширение принципов ООП.
Composition, inheritance, and delegation:
The "open/closed principle" advocates that classes and functions "should be open for extension, but closed for modification".
И что же тут делает принцип SOLID?)))
Цитата Сообщение от korvin_ Посмотреть сообщение
а набор принципов, которые Мартин приплёл к ООП и собрал в красивую аббревиатуру, чтобы свои книги лучше продавать.
Мало того, что ты перевираешь факты, так еще ничем не подкрепляешь (Proof):
The SOLID acronym was introduced later in 2004 or thereabouts by Michael Feathers.
Цитата Сообщение от korvin_ Посмотреть сообщение
Так зачем ты его сюда приплёл?
Захотел. Еще вопросы?

0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
16.02.2021, 21:51
Так речь не про ооп и солид же, а про то, как работает наследование. С технической стороны никто не помешает мне наследовать ворону от верблюда.
Принципы проектирования сформулировал дядя Боб где-то в начале 2000. Про них он довольно часто рассказывает на своих лекциях, например. Майкл Фезерс придумал саму аббревиатуру. Которая, опять же, не имеет никакого отношения к вопросу.
Про то, как выделяется память, почитай мои ответы, но я, естественно, могу заблуждаться, за подробностями - можно попробовать поискать доклад у товарища Шипилева и потыкать его jol, например.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.02.2021, 21:51

Перегрузка методов и варарги
Здравствуйте! Посмотрел такой пример, поднялись волосы public class A { static void f(float x, Character ... c) {} ...

Перегрузка методов (частный случай)
Доброго времени суток. Возник вопрос ответ на который не нашел в сети. Допустим имеем следующий перегруженный метод: public class...

Перегрузка методов и передача аргументов
Кто может помочь с лабой? Необходимо к классам из задания лабораторной работы добавить: - не менее 5 перегруженных методов (для тех...

Зачем нужна перегрузка методов?
Люди, объясните мне пожалуйста, зачем нужна перегрузка методов.

Перегрузка методов
Hello! Прошу помощи от экспертов в С++.Помогите решить задачу!и прокомментировать выполнения действий. Перегрузка методов. ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru