Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/30: Рейтинг темы: голосов - 30, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 22.01.2021
Сообщений: 7

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

14.02.2021, 17:43. Показов 6680. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru