Путаница - доступность участников в Java

Это вопрос Джава:

При создании экземпляра Object, имеющего ссылочный тип, отличный от типа Object, какие сценарии определяют доступность участников?

Например:

Shape shp = new Square(2, 4); //Where Square extends Rectangle and implements Shape

Будут ли методы Shape или Square связаны с этим кодом? Имеет ли значение, если все методы статичны? Влияет ли сокрытие класса на выбор? Если методы переопределяются, влияет ли это на выбор?

Вот более подробный вопрос о том же:

public abstract class Writer {
public static void write() {System.out.println("Writing...");}
}
public class Author extends Writer {
public static void write() {System.out.println("Writing book");}
}
public class Programmer extends Writer {
public static void write() {System.out.println("Writing code");}
public static void main(String[] args) {
Writer w = new Programmer();
w.write();
}
}

Почему приведенный выше код производит вывод -> Запись ...

И следующий код производит вывод -> Написание кода

public abstract class Writer {
public void write() {System.out.println("Writing...");}
}
public class Author extends Writer {
public void write() {System.out.println("Writing book");}
}
public class Programmer extends Writer {
public void write() {System.out.println("Writing code");}
public static void main(String[] args) {
Writer w = new Programmer();
w.write();
}
}

При создании экземпляра объекта, имеющего ссылочный тип, отличный от типа объекта (как в этом примере), какие сценарии определяют доступность членов?

Похоже, вы просите полного объяснения наследования и полиморфизма. Есть множество книг, в которых есть целые главы. Слишком много информации, чтобы поместиться на одной странице переполнения стека.

Dawood ibn Kareem 17.10.2018 21:00

Спасибо за комментарий. Я добавил больше деталей.

Splink01 17.10.2018 21:22

Хорошо, короткий ответ - статические методы разрешаются во время компиляции в зависимости от типа переменной, для которой вы их вызываете; нестатические методы разрешаются во время выполнения на основе класса объекта, на который ссылается переменная, для которой вы их вызываете.

Dawood ibn Kareem 17.10.2018 21:29

@DawoodibnKareem - это именно то, что мне нужно было знать. Спасибо!

Splink01 22.10.2018 20:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
58
1

Ответы 1

Will the Shape or Square methods be associated with this code? Yes

Методы, известные Shape, можно будет вызывать только с использованием ссылочной переменной shp.

Does it matter if all methods are static?

Полиморфные вызовы не могут выполняться с использованием ссылочной переменной shp, если все методы статичны.

Does class hiding have any bearing on the choice?

Да, тип ссылочной переменной shp будет определять, какой именно метод будет вызван. Будет определено во время самой компиляции.

If methods are overridden, does that affect the choice?

Статические методы не являются полиморфными, поэтому сценария переопределения не существует.

Саурав, спасибо за попытку ответить на мой довольно обширный вопрос. Я добавил больше деталей к своему первоначальному вопросу, если вы хотите взглянуть.

Splink01 17.10.2018 21:23

Другие вопросы по теме