父类里只有带参的构造函数,子类里的方法形参是父类的对象,在主类用子类对象调用该方法,编译不通过,为什么? 父类里只有带参的构造函数,子类里的方法1的形参是父类的对象,在主类里创建并初始化父类对象,再初始化子类对象,用子类对象调用方法1,编译不通过.后在父类里加不带参数的构造函数,编译通过,为什么?形参也要实例化吗?是不是同时在内存中分配两个地址给实参、形参,然后使形参的地址等于实参地址,再释放形参的内存空间? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没看明白,有些乱。很简单,创建子类的对象的时候会一次调用父类的构造方法,如果你自己不用super来显示的调用,编译器会自动给你写一个super();来调用父类的默认构造方法,如果父类没有无参构造方法,则编译出错。必须你显示的添加。没有别的问题了。 源程序:import java.util.Scanner;class Point2D{ double x,y; /*Point2D() {}//为什么一定要加构造函数*/ Point2D(double a,double b) {x=a;y=b;} void offset(double a, double b) {x=x+a;y=y+b;}}class Point3D extends Point2D{ double x1,y1,z1; Point3D(double a,double b,double c) { x1=a;y1=b;z1=c; } Point3D(Point2D p,double z)//子类的方法的参数是父类的对象 { x1=p.x;y1=p.y;z1=z; } void offset(double a, double b,double c) {x1=x1+a;y1=y1+b;z1=z1+b;}}public class lab4_1{ public static void main(String[] args) { Point2D p2d1,p2d2; Point3D p3d1,p3d2; int a,b,c; Scanner sc = new Scanner(System.in); System.out.println("输入二维空间下的第一起始点"); a = sc.nextInt(); b = sc.nextInt(); p2d1=new Point2D (a,b); System.out.println("输入二维空间下的第二起始点"); a = sc.nextInt(); b = sc.nextInt(); p2d2=new Point2D (a,b); System.out.println("是否要平移第一起始点?1代表是,0代表否"); a = sc.nextInt(); if(a==1) { System.out.println("输入平移量"); a = sc.nextInt(); b = sc.nextInt(); p2d1.offset(a, b); } System.out.println("是否要平移第二起始点?1代表是,0代表否"); a = sc.nextInt(); if(a==1) { System.out.println("输入平移量"); a = sc.nextInt(); b = sc.nextInt(); p2d2.offset(a, b); } System.out.println("它们之间的距离是"+Math.hypot(p2d1.x-p2d2.x,p2d1.y-p2d2.y)); System.out.println("输入三维空间下的第一起始点"); a = sc.nextInt(); b = sc.nextInt(); c = sc.nextInt(); p3d1=new Point3D (a,b,c); System.out.println("输入三维空间下的第二起始点的z坐标"); a = sc.nextInt(); p3d2=new Point3D (p2d1,c); System.out.println("是否要平移第一起始点?1代表是,0代表否"); a = sc.nextInt(); if(a==1) { System.out.println("输入平移量"); a = sc.nextInt(); b = sc.nextInt(); c = sc.nextInt(); p3d1.offset(a,b,c); } System.out.println("是否要平移第二起始点?1代表是,0代表否"); a = sc.nextInt(); if(a==1) { System.out.println("输入平移量"); a = sc.nextInt(); b = sc.nextInt(); c = sc.nextInt(); p3d2.offset(a,b,c); } System.out.println("它们之间的距离是"+Math.sqrt((p3d1.x1-p3d2.x1)*(p3d1.x1-p3d2.x1)+(p3d1.y1-p3d2.y1)*(p3d1.y1-p3d2.y1)+(p3d1.z1-p3d2.z1)*(p3d1.z1-p3d2.z1))); }}知道应该把屏蔽的那条语句加入,但是不知道为什么 实例化子类时,会调用父类的构造函数,父类里有一个代参的构造函数,子类的构造函数里就必须显示调用父类的这个构造函数,否则会隐式调用super();,而父类没有无参的构造函数,则编译通不过 关于第一个小程序 wordcount的问题。。 ?新手请教编程中一个问题! java支配,贪婪的问题。(违背常理呀) 这个正则表达式怎么写? JAVA 音频 视频 求一段代码,关于Socket连接 初学JAVA ,各位高手有无捷径介绍? 加密算法之md5算法java源程序 存储过程里面有一个cursor的out型的参数,请问在java中可以拿到吗? 菜鸟请问:安装JDK后如何配置路径? out.println()在这里是什么意思?不是问System.out.println() [散分 80分] 想写一个关于通信协议点评的帖子,不知道写在哪个版面比较好
很简单,创建子类的对象的时候会一次调用父类的构造方法,如果你自己不用super来显示的调用,编译器会自动给你写一个super();来调用父类的默认构造方法,如果父类没有无参构造方法,则编译出错。必须你显示的添加。没有别的问题了。
import java.util.Scanner;
class Point2D
{
double x,y;
/*Point2D()
{}//为什么一定要加构造函数*/
Point2D(double a,double b)
{x=a;y=b;}
void offset(double a, double b)
{x=x+a;y=y+b;}
}
class Point3D extends Point2D
{
double x1,y1,z1;
Point3D(double a,double b,double c)
{
x1=a;y1=b;z1=c;
}
Point3D(Point2D p,double z)//子类的方法的参数是父类的对象
{
x1=p.x;y1=p.y;z1=z;
}
void offset(double a, double b,double c)
{x1=x1+a;y1=y1+b;z1=z1+b;}
}
public class lab4_1
{
public static void main(String[] args)
{
Point2D p2d1,p2d2;
Point3D p3d1,p3d2;
int a,b,c;
Scanner sc = new Scanner(System.in);
System.out.println("输入二维空间下的第一起始点");
a = sc.nextInt();
b = sc.nextInt();
p2d1=new Point2D (a,b);
System.out.println("输入二维空间下的第二起始点");
a = sc.nextInt();
b = sc.nextInt();
p2d2=new Point2D (a,b);
System.out.println("是否要平移第一起始点?1代表是,0代表否");
a = sc.nextInt();
if(a==1)
{
System.out.println("输入平移量");
a = sc.nextInt();
b = sc.nextInt();
p2d1.offset(a, b);
}
System.out.println("是否要平移第二起始点?1代表是,0代表否");
a = sc.nextInt();
if(a==1)
{
System.out.println("输入平移量");
a = sc.nextInt();
b = sc.nextInt();
p2d2.offset(a, b);
}
System.out.println("它们之间的距离是"+Math.hypot(p2d1.x-p2d2.x,p2d1.y-p2d2.y));
System.out.println("输入三维空间下的第一起始点");
a = sc.nextInt();
b = sc.nextInt();
c = sc.nextInt();
p3d1=new Point3D (a,b,c);
System.out.println("输入三维空间下的第二起始点的z坐标");
a = sc.nextInt();
p3d2=new Point3D (p2d1,c);
System.out.println("是否要平移第一起始点?1代表是,0代表否");
a = sc.nextInt();
if(a==1)
{
System.out.println("输入平移量");
a = sc.nextInt();
b = sc.nextInt();
c = sc.nextInt();
p3d1.offset(a,b,c);
}
System.out.println("是否要平移第二起始点?1代表是,0代表否");
a = sc.nextInt();
if(a==1)
{
System.out.println("输入平移量");
a = sc.nextInt();
b = sc.nextInt();
c = sc.nextInt();
p3d2.offset(a,b,c);
}
System.out.println("它们之间的距离是"+Math.sqrt((p3d1.x1-p3d2.x1)*(p3d1.x1-p3d2.x1)+(p3d1.y1-p3d2.y1)*(p3d1.y1-p3d2.y1)+(p3d1.z1-p3d2.z1)*(p3d1.z1-p3d2.z1)));
}
}
知道应该把屏蔽的那条语句加入,但是不知道为什么
否则会隐式调用super();,而父类没有无参的构造函数,则编译通不过