java程序疑问:关于引用父类和子类对象的创建。下面实例为什么会"调用MyPoint类的无参数构造方法”?
为什么运行最后一个程序中的MyCircleobj=newMyCircle(10,10,5)会"调用MyPoint类的无参数构造方法“??============以下是文件...
为什么运行最后一个程序中的MyCircle obj=new MyCircle(10,10,5)会"调用MyPoint类的无参数构造方法“??
============以下是文件MyPiont.java的内容===============
package mylib.myclasses.mygraph;
public class MyPoint {
/**构造方法,点坐标值设置为(0,0)*/
public MyPoint( ) {
System.out.println("调用MyPoint类的无参数构造方法");
}
/**构造方法,创建一个坐标值为(x,y)的点
public MyPoint(int x,int y) {
this.x=x;
this.y=y;
}
public String toString() {
return "("+x+","+y+")";
}
}
==========以下是文件MyCircle.java的内容==============
package mylib.myclasses.mygraph;
public class MyCircle extends MyPoint {
protected int radius;//声明圆的半径
public MyCircle( ) {
System.out.println("调用MyCircle类的无参数构造方法");
}
public MyCircle(int x,int y, int radius) {
this.x=x;
this.y=y;
this.radius=radius;
}
public String toString() { //覆盖父类的方法
return "圆心:"+super.toString()+"; 半径:"+radius;}
}
}
//TestMyCircle2.java
import mylib.myclasses.mygraph.MyCircle;
==========以下是文件TestMyCircle2.java的内容==============
public class TestMyCircle2 {
public static void main(String args[]) {
MyCircle
obj=new MyCircle(10,10,5);
System.out.println(obj.toString());
}
}运行结果如附图
我重新把程序简化了一下,便于大家阅读。
//TestMyCircle3.java
public class TestMyCircle3 {
public static void main(String args[]) {
MyCircle obj=new MyCircle(10,10,5);
System.out.println(obj.toString());
}
}
class MyPoint {
int x,y;
/**构造方法,点坐标值设置为(0,0)*/
public MyPoint( ) {
System.out.println("调用MyPoint类的无参数构造方法");
}
public MyPoint(int x,int y) {
this.x=x;
this.y=y;
}
public String toString() {
return "("+x+","+y+")";
}
}
class MyCircle extends MyPoint {
protected int radius;//声明圆的半径
public MyCircle( ) {
System.out.println("调用MyCircle类的无参数构造方法");
}
public MyCircle(int x,int y, int radius) {
super(x,y);
/*this.x=x;
this.y=y;*/
this.radius=radius;
}
}
相关程序运行结果如下: 展开
============以下是文件MyPiont.java的内容===============
package mylib.myclasses.mygraph;
public class MyPoint {
/**构造方法,点坐标值设置为(0,0)*/
public MyPoint( ) {
System.out.println("调用MyPoint类的无参数构造方法");
}
/**构造方法,创建一个坐标值为(x,y)的点
public MyPoint(int x,int y) {
this.x=x;
this.y=y;
}
public String toString() {
return "("+x+","+y+")";
}
}
==========以下是文件MyCircle.java的内容==============
package mylib.myclasses.mygraph;
public class MyCircle extends MyPoint {
protected int radius;//声明圆的半径
public MyCircle( ) {
System.out.println("调用MyCircle类的无参数构造方法");
}
public MyCircle(int x,int y, int radius) {
this.x=x;
this.y=y;
this.radius=radius;
}
public String toString() { //覆盖父类的方法
return "圆心:"+super.toString()+"; 半径:"+radius;}
}
}
//TestMyCircle2.java
import mylib.myclasses.mygraph.MyCircle;
==========以下是文件TestMyCircle2.java的内容==============
public class TestMyCircle2 {
public static void main(String args[]) {
MyCircle
obj=new MyCircle(10,10,5);
System.out.println(obj.toString());
}
}运行结果如附图
我重新把程序简化了一下,便于大家阅读。
//TestMyCircle3.java
public class TestMyCircle3 {
public static void main(String args[]) {
MyCircle obj=new MyCircle(10,10,5);
System.out.println(obj.toString());
}
}
class MyPoint {
int x,y;
/**构造方法,点坐标值设置为(0,0)*/
public MyPoint( ) {
System.out.println("调用MyPoint类的无参数构造方法");
}
public MyPoint(int x,int y) {
this.x=x;
this.y=y;
}
public String toString() {
return "("+x+","+y+")";
}
}
class MyCircle extends MyPoint {
protected int radius;//声明圆的半径
public MyCircle( ) {
System.out.println("调用MyCircle类的无参数构造方法");
}
public MyCircle(int x,int y, int radius) {
super(x,y);
/*this.x=x;
this.y=y;*/
this.radius=radius;
}
}
相关程序运行结果如下: 展开
2个回答
展开全部
因为MyCircle类继承了MyPoint类,java中构造子类的过程是先构造出该子类的所有父类后再构造子类。你使用MyCircle(int ,int ,int)构造方法构造MyCircle类对象,因为这个构造方法中没有显示调用父类的构造方法,所以为了构造父类对象就会调用父类不带参数的构造方法也就是MyPoint()。如果你在MyCircle(int ,int ,int)构造方法中显示调亏余用父类的super(int ,int)构造方法,那么它就会调液碧用MyPoint类的MyPoint(int,int)构造方法来构造这个父类对象。你可以从一个现象中来理解这个机制:为什么子类可以调用父类属性和方法?子类能够调用就说明子类闹空举已经有了这个属性和方法才能够调用到,所以子类中必然含有父类的对象,你可以粗浅的看做子类封装了一个父类对象。
展开全部
构造子类的时洞空候,是会首先构造父类,激滑然后加入子类中纳铅瞎的定义的部分
你父类只有一个构造方法,当然会被调用了
你父类只有一个构造方法,当然会被调用了
追问
父类MyPoint有两个构造方法啊:
/**构造方法,点坐标值设置为(0,0)*/
public MyPoint( ) {System.out.println("调用MyPoint类的无参数构造方法"); }
/**构造方法,创建一个坐标值为(x,y)的点
public MyPoint(int x,int y) { this.x=x; this.y=y;}
追答
那你就改一下啊,这里有问题
public MyCircle(int x,int y, int radius) {
this.x=x;
this.y=y;
this.radius=radius;
}
应该是
public MyCircle(int x,int y, int radius) {
this.x=x;
this.y=y;
this.radius=radius;
super(x, y);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询