Путаница - доступность членов на Java - PullRequest
0 голосов
/ 17 октября 2018

Это 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();
}
}

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

1 Ответ

0 голосов
/ 17 октября 2018

Будут ли методы Shape или Square связаны с этим кодом?Да

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

Имеет ли значение, если все методы являются статическими?

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

Имеет ли сокрытие класса какое-либо влияние на выбор?

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

Если методы переопределены, влияет ли это на выбор?

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

...