有关Java覆盖的有关问题
有关Java覆盖的问题
package point3d;
import java.util.*;
class Point2D{
int x,y;
public Point2D(){
x=0;y=0;
}
public Point2D(int X,int Y){
x=X;
y=Y;
}
void offset(int X,int Y){
x=X;
y=Y;
}
void output(){
System.out.println("x="+this.x);
System.out.println("y="+this.y);
}
}
class Point3D extends Point2D{
int x,y,z;
public Point3D(int X, int Y,int Z) {
super(X,Y);
z=Z;
}
public Point3D(Point2D p,int Z){
x=p.x;
y=p.y;
z=Z;
}
void offset(int X,int Y,int Z){
x=X;
y=Y;
z=Z;
}
void output(){
System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("z="+z);
}
}
public class Point{
public static void main(String[] args){
Point3D p1;
p1=new Point3D(1,2,3);
p1.output();
}
}
请问这里输出的为什么是0 0 3而不是1 2 3呢?
------解决思路----------------------
Point3D有自己独立的属性x,y(它们是默认值0),被赋值的是父类对象属性
------解决思路----------------------
当new的时候,会开辟存储空间,比如,给x,y,z开辟空间,这时没有赋值的话有默认初始值,int类型为0。调用相应构造器,先执行调用父类的构造器,把形参的值传入,父类的x,y设置为1,2,执行下个语句子类的z设置为3,创建对象结束,下一条语句打印的是子类的x,y,z的值,所以为0 0 3
package point3d;
import java.util.*;
class Point2D{
int x,y;
public Point2D(){
x=0;y=0;
}
public Point2D(int X,int Y){
x=X;
y=Y;
}
void offset(int X,int Y){
x=X;
y=Y;
}
void output(){
System.out.println("x="+this.x);
System.out.println("y="+this.y);
}
}
class Point3D extends Point2D{
int x,y,z;
public Point3D(int X, int Y,int Z) {
super(X,Y);
z=Z;
}
public Point3D(Point2D p,int Z){
x=p.x;
y=p.y;
z=Z;
}
void offset(int X,int Y,int Z){
x=X;
y=Y;
z=Z;
}
void output(){
System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("z="+z);
}
}
public class Point{
public static void main(String[] args){
Point3D p1;
p1=new Point3D(1,2,3);
p1.output();
}
}
请问这里输出的为什么是0 0 3而不是1 2 3呢?
------解决思路----------------------
Point3D有自己独立的属性x,y(它们是默认值0),被赋值的是父类对象属性
------解决思路----------------------
当new的时候,会开辟存储空间,比如,给x,y,z开辟空间,这时没有赋值的话有默认初始值,int类型为0。调用相应构造器,先执行调用父类的构造器,把形参的值传入,父类的x,y设置为1,2,执行下个语句子类的z设置为3,创建对象结束,下一条语句打印的是子类的x,y,z的值,所以为0 0 3