求助关于构造器的问题
public class Point {double x, y;
public Point() {
System.out.println("这是无参构造器");
}
public Point(double _x, double _y){
System.out.println("这是有参构造器");
x = _x;
y = _y;
}
public double getDistance(Point p) {
double d = Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));
return d;
}
public static void main(String[] args) {
Point p = new Point();
Point p1 = new Point(3.0, 4.0);
Point origin = new Point(0, 0);
System.out.println(p1.getDistance(origin));
}
}
网上解释说,创建对象时系统会对这个对象的实例进行初始化,如果想改变这种初始化,就可以通过自定义构造器实现。现在有几个问题不明吧:
1.
public class Point {
double x, y;}本身就有x和y,public Point(double _x, double _y)这一段有有啥意义呢?
2.在有参构造器里,“_x”这种写法是约定俗成呢?还是Java规定必须这么写?
3.public double getDistance(Point p)里面的Point p是public class Point还是public Point() 还是public Point(double _x, double _y)? 1
public class Point {
double x, y;}
这个 x,y 是实例变量,实例变量要想在其他类中改变他的值只能实例化的时候,或者实例化之后.
public Point(double _x, double _y)这一段
所以这段代码就是为了初始化x,y的变量的
2
一般来说有参构造的参数名称最好与类中的实例变量相同
就像这样
public Point(double x, double y){
System.out.println("这是有参构造器");
this.x = x;
this.y = y;
}
不过要加 this 关键字应该是你还没有学到这儿
3
Point p 就是 Point类的引用 他指向整个类就跟 String 是一样的 小伤口 发表于 2022-3-9 11:03
1
这个 x,y 是实例变量,实例变量要想在其他类中改变他的值只能实例化的时候,或者实例化之后.
1.如果构造器前不用public修饰会怎么样?
2.class Point里既然有x和y两个变量,无参构造器的意义是什么呢?
3.如果不用构造器,是不是就该写成public class Point(double x, double y){
}
4. Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));里的x和y是哪里的? 1 可以不用public修饰
没有修饰就是package型的,同一个包的中其他类可以构造此类的对象,
用public修饰的构造方法,是为了让外部能够使用new来创建对象,你也可以用 private
protect 来修饰这是来决定此构造方法的访问权限的
2 不管是无参构造还是有参都是用来实例化对象的,如果你的类不需要初始化类中的变量就用无参,需要就加上有参
一般来说无参构造都要添加,
子类继承父类的时候会自动继承默认的构造函数(这里指无参的构造函数)。而子类里面
已经有一个带有参数的构造函数了,如果没有写那个默认的不带参数的构造函数的话,继承的时候就会报错,因为系
统不知道要继承哪个构造函数,必须明确的使用super()关键字来描述。所以一般为了避免这种错误的发生,在有带多
个构造函数的类里面都会写一个不带参数的构造函数。
3 x y 就是当前类的实例变量 p.x 和p.y是另一个实例化的类实例变量,换言之就是同时实例化两个相同的类进行计算
页:
[1]