马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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修饰
没有修饰就是package型的,同一个包的中其他类可以构造此类的对象,
用public修饰的构造方法,是为了让外部能够使用new来创建对象,你也可以用 private
protect 来修饰这是来决定此构造方法的访问权限的
2 不管是无参构造还是有参都是用来实例化对象的,如果你的类不需要初始化类中的变量就用无参,需要就加上有参
一般来说无参构造都要添加,
子类继承父类的时候会自动继承默认的构造函数(这里指无参的构造函数)。而子类里面
已经有一个带有参数的构造函数了,如果没有写那个默认的不带参数的构造函数的话,继承的时候就会报错,因为系
统不知道要继承哪个构造函数,必须明确的使用super()关键字来描述。所以一般为了避免这种错误的发生,在有带多
个构造函数的类里面都会写一个不带参数的构造函数。
3 x y 就是当前类的实例变量 p.x 和p.y是另一个实例化的类实例变量,换言之就是同时实例化两个相同的类进行计算
|