Это вопрос Джава:
При создании экземпляра 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();
}
}
При создании экземпляра объекта, имеющего ссылочный тип, отличный от типа объекта (как в этом примере), какие сценарии определяют доступность членов?
Спасибо за комментарий. Я добавил больше деталей.
Хорошо, короткий ответ - статические методы разрешаются во время компиляции в зависимости от типа переменной, для которой вы их вызываете; нестатические методы разрешаются во время выполнения на основе класса объекта, на который ссылается переменная, для которой вы их вызываете.
@DawoodibnKareem - это именно то, что мне нужно было знать. Спасибо!




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?
Статические методы не являются полиморфными, поэтому сценария переопределения не существует.
Саурав, спасибо за попытку ответить на мой довольно обширный вопрос. Я добавил больше деталей к своему первоначальному вопросу, если вы хотите взглянуть.
Похоже, вы просите полного объяснения наследования и полиморфизма. Есть множество книг, в которых есть целые главы. Слишком много информации, чтобы поместиться на одной странице переполнения стека.