import java.io.PrintWriter;
public class PointTest
{
public static void main(String args[])
{
PrintWriter out = new PrintWriter(System.out ,true);
MyPoint mp =new MyPoint(4,3);
Point2D p = new Point2D(11);
Point2D q=mp;
mp.x=5;mp.y =12;
out.println("\n\t DataMember Access Test:\n");
out.println("mp = (" + mp.x + ", "+mp.y+")");
out.println("p = (" + p.x + ", "+p.y+")");
out.println("q = (" + q.x + ", "+q.y+")");
out.println("\n\t CastingTest:\n");
out.println("(Point2D)mp = (" + ((Point2D)mp).x + "," +((Point2D)mp).y + ")");
out.println("(MyPoint)q = (" + ((MyPoint)q).x + "," +((MyPoint)q).y + ")");
}
} public class Point2D
{
int x,y;
Point2D(){
this(0,0);
}
Point2D(int x)
{
this(x,0);
}
Point2D(int x,int y )
{
this.x=x;
this.y=y;
}
double length()
{
return Math.sqrt(x*x+y*y);
}
} public class MyPoint extends Point2D
{
int x,y;
MyPoint(int x,int y)
{
super(x,y);
this.x=x;
this.y=y;
}
double length()
{
return Math.sqrt(x*x+y*y);
}
double distance()
{
return Math.abs(length()-super.length());
}
}
运行结果是 : DataMember Access Test:mp = (5, 12)
p = (11, 0)
q = (4, 3) CastingTest:(Point2D)mp = (4,3)
(MyPoint)q = (5,12) ??我这里不是很清楚,请问为什么是 (4,3)和 (5,12)
public class PointTest
{
public static void main(String args[])
{
PrintWriter out = new PrintWriter(System.out ,true);
MyPoint mp =new MyPoint(4,3);
Point2D p = new Point2D(11);
Point2D q=mp;
mp.x=5;mp.y =12;
out.println("\n\t DataMember Access Test:\n");
out.println("mp = (" + mp.x + ", "+mp.y+")");
out.println("p = (" + p.x + ", "+p.y+")");
out.println("q = (" + q.x + ", "+q.y+")");
out.println("\n\t CastingTest:\n");
out.println("(Point2D)mp = (" + ((Point2D)mp).x + "," +((Point2D)mp).y + ")");
out.println("(MyPoint)q = (" + ((MyPoint)q).x + "," +((MyPoint)q).y + ")");
}
} public class Point2D
{
int x,y;
Point2D(){
this(0,0);
}
Point2D(int x)
{
this(x,0);
}
Point2D(int x,int y )
{
this.x=x;
this.y=y;
}
double length()
{
return Math.sqrt(x*x+y*y);
}
} public class MyPoint extends Point2D
{
int x,y;
MyPoint(int x,int y)
{
super(x,y);
this.x=x;
this.y=y;
}
double length()
{
return Math.sqrt(x*x+y*y);
}
double distance()
{
return Math.abs(length()-super.length());
}
}
运行结果是 : DataMember Access Test:mp = (5, 12)
p = (11, 0)
q = (4, 3) CastingTest:(Point2D)mp = (4,3)
(MyPoint)q = (5,12) ??我这里不是很清楚,请问为什么是 (4,3)和 (5,12)
解决方案 »
- 急问String中文编码相关问题!
- System.out.println();
- Java中把file.encoding改成ISO-8859-1后,输入中还是正常显示,这是为何,代码如下!class文件在附件里面!
- 求大哥或美女给帮个忙?
- Junit
- 表达式求值问题
- 关于package和import的一点疑问!
- 使用jdk1。3的appletviewer跟1。4的appletviewer是有差别的如JComboBox在1。3下就不能正确显示
- getBound()这个方法是那个类的?
- JBuilder3问题求助!
- 如何从本地读取png图片创建BufferedImage对象??
- 菜鸟求助毕业设计中的问题
动态邦定有一个特点就是生成的是子类的对象,但是使用的其实都是父类的属性和方法,而q若要想使用指向的对象MyPoint类中的属性和方法,就得强制转型,就像(MyPoint)q,这种方法也叫向下转型,但是向下转型必须以Point2D q=new MyPoint(4,3);这种方式声明对象,像MyPoint mp =new MyPoint(4,3);这样声明对象就不能使用向下转型;与此相反,向上转型就没有这样的限制,就像MyPoint mp =new MyPoint(4,3);声明的对象可以直接使用向上转型(Point2D)mp换句通俗的话讲,子类一定是一个父类(extends关键字),而父类则不知道那些类是自己的子类
????????????????????
为什么子类一定是一个父类,楼上地把话说清楚好不好,总之把父类强转成子类肯定不行。
还有,你的x,y能不能不这样赋值啊,题外话,别生气啊