这是一个Java问题:

实例化引用类型不同于Object类型的Object时,确定成员可用性的方案有哪些?

例如:

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


ShapeSquare方法将与此代码关联吗?
所有方法是否都是静态的有关系吗?
上课隐瞒对选择有影响吗?
如果重写了方法,那会影响选择吗?

这是关于同一件事的更详细的问题:

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


当实例化具有与对象类型不同的引用类型的对象时(如本示例),确定成员可用性的方案是什么?

最佳答案

Shape或Square方法会与此代码关联吗?是


仅允许使用shp引用变量调用Shape已知的方法。


  所有方法是否都是静态的有关系吗?


如果所有方法都是静态的,则不能使用shp引用变量进行多态调用。


  上课隐瞒对选择有影响吗?


是的,shp参考变量的类型将完全确定调用哪个方法。将在编译时自行决定。


  如果重写了方法,那会影响选择吗?


静态方法不是多态的,因此不会存在任何替代方案。

10-08 06:20