java中多态的缺陷——域
在java中通过多态可以很好的解决继承问题,但是当涉及到域时会出现许多问题。
class Super{//定义一个基础类
public int field = 0;//注意到此处的field是public的
public int getfield(){
return field;
}
}
class Sub extends Super{//继承基础类Super
public int field = 1;
public int getfield(){
return field;
}
public int getSuperfield(){
return super.field;
}
}
public class Biking {
public static void main(String[] args) {
Super s = new Sub();//通过向上转型,此处的s是一个Sub类型的变量,但是下面的输出结果却不是多态的。
System.out.println("s.field = "+s.field+" "+"s.getfield = "+s.getfield());
Sub s1 = new Sub();//此处没有通过向上转型
System.out.println("s1.field = "+s1.field+" "+"s1.getfield = "+s1.getfield()+" "+"s1.getSuperfield = " + s1.getSuperfield());
}
}
class Super{//定义一个基础类
public int field = 0;//注意到此处的field是public的
public int getfield(){
return field;
}
}
class Sub extends Super{//继承基础类Super
public int field = 1;
public int getfield(){
return field;
}
public int getSuperfield(){
return super.field;
}
}
public class Biking {
public static void main(String[] args) {
Super s = new Sub();//通过向上转型,此处的s是一个Sub类型的变量,但是下面的输出结果却不是多态的。
System.out.println("s.field = "+s.field+" "+"s.getfield = "+s.getfield());
Sub s1 = new Sub();//此处没有通过向上转型
System.out.println("s1.field = "+s1.field+" "+"s1.getfield = "+s1.getfield()+" "+"s1.getSuperfield = " + s1.getSuperfield());
}
}
输出的结果为:
对于变量s的输出结果,当我们使用向上转型时,任何对域的访问操作都是通过编译器解析,不在是多态的所以会出现那样的结果。
