Q1:
class Super {
public int field = 0;
public int getField() { return field; }
}class Sub extends Super {
public int field = 1;
public int getField() { return field; }
public int getSuperField() { return super.field; }
}public class FieldAccess {
public static void main(String[] args) {
Super sup = new Sub(); // Upcast,运行结束时,sup含有2个field,一个为自己的field,另一个为父类的field.
System.out.println("sup.field = " + sup.field + //这个比较困惑.
", sup.getField() = " + sup.getField());
Sub sub = new Sub();
System.out.println("sub.field = " +
sub.field + ", sub.getField() = " +
sub.getField() +
", sub.getSuperField() = " +
sub.getSuperField());
}
} /* Output:
sup.field = 0, sup.getField() = 1
sub.field = 1, sub.getField() = 1, sub.getSuperField() = 0Q2:
If a method is static, it doesn’t behave polymorphically:
class StaticSuper {
public static String staticGet() {
return "Base staticGet()";
}
public String dynamicGet() {
return "Base dynamicGet()";
}
}class StaticSub extends StaticSuper {
public static String staticGet() {
return "Derived staticGet()";
}
public String dynamicGet() {
return "Derived dynamicGet()";
}
}public class StaticPolymorphism {
public static void main(String[] args) {
StaticSuper sup = new StaticSub(); // Upcast
System.out.println(sup.staticGet()); //根据编译器观察,此处的sup是一个StaticSub类型.不解!
System.out.println(sup.dynamicGet());
}
} /* Output:
Base staticGet()
Derived dynamicGet()
*///:~
虽然说上面这些可能在实际应用中用到的可能性不是很大,但还是希望求解!!
class Super {
public int field = 0;
public int getField() { return field; }
}class Sub extends Super {
public int field = 1;
public int getField() { return field; }
public int getSuperField() { return super.field; }
}public class FieldAccess {
public static void main(String[] args) {
Super sup = new Sub(); // Upcast,运行结束时,sup含有2个field,一个为自己的field,另一个为父类的field.
System.out.println("sup.field = " + sup.field + //这个比较困惑.
", sup.getField() = " + sup.getField());
Sub sub = new Sub();
System.out.println("sub.field = " +
sub.field + ", sub.getField() = " +
sub.getField() +
", sub.getSuperField() = " +
sub.getSuperField());
}
} /* Output:
sup.field = 0, sup.getField() = 1
sub.field = 1, sub.getField() = 1, sub.getSuperField() = 0Q2:
If a method is static, it doesn’t behave polymorphically:
class StaticSuper {
public static String staticGet() {
return "Base staticGet()";
}
public String dynamicGet() {
return "Base dynamicGet()";
}
}class StaticSub extends StaticSuper {
public static String staticGet() {
return "Derived staticGet()";
}
public String dynamicGet() {
return "Derived dynamicGet()";
}
}public class StaticPolymorphism {
public static void main(String[] args) {
StaticSuper sup = new StaticSub(); // Upcast
System.out.println(sup.staticGet()); //根据编译器观察,此处的sup是一个StaticSub类型.不解!
System.out.println(sup.dynamicGet());
}
} /* Output:
Base staticGet()
Derived dynamicGet()
*///:~
虽然说上面这些可能在实际应用中用到的可能性不是很大,但还是希望求解!!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货