子类中变量隐藏

子类中既有变量的隐藏也有方法的覆盖
class basePoint{
int x=0;
int y=0;
void move(int dx,int dy){
x+=dx;
y+=dy;
}
int getX(){
return x;
}
int getY(){
return y;
}
}
class realPoint extends basePoint{
float x=0.0f;
float y=0.0f;
void move(int dx,int dy){
move((float)dx,(float)dy);
}
void move(float dx,float dy){
x+=dx;
y+=dy;
}
int getX(){
return (int) Math.floor(x);
}
int getY(){
return (int)Math.floor(y);
}
}
public class showDiffer{
public static void main(String[] args){
realPoint rp=new realPoint();
basePoint bp=rp;
rp.move(1.7f, 4.7f);
bp.move(1, -1);
show(bp.x,bp.y);
show(rp.x,rp.y);
show(rp.getX(),rp.getY());
show(bp.getX(),bp.getY());
}
static void show(int x,int y){
System.out.println("("+x+","+y+")");
}
static void show(float x,float y){
System.out.println("("+x+","+y+")");
}

}
1 父类和子类都有getX()和getY()方法,它们各自返回的是各类中x和y的值
2 前面连续的rp.move和bp.move调用的都是子类的方法,所以修改的是子类的变量值。
3 输出bp.x金额bp.y的时候,虽然bp指向一个子类对象,但它在声明的时候是一个父类的变量,而 变量没有运行时多态的特性所以在编译时会根据p的类型决定引用父类的变量
(0,0)
(2.7,3.6999998)
(2,3)
(2,3)
成员在被子类重写时,变量被称为隐藏,而方法被称为覆盖

你可能感兴趣的:(变量)