一 :构造器的作用
1.为了初始化成员属性,而不是初始化对象,初始化对象是通过new关键字实现的
2.通过new调用构造方法初始化对象,编译时根据参数签名来检查构造函数,称为静态联编和编译多态
(参数签名:参数的类型,参数个数和参数顺序)
3.创建子类对象会调用父类构造方法但不会创建父类对象,只是调用父类构造方法初始化父类成员属性;
二:构造方法的定义
构造方法也叫构造器或者构造函数
构造方法与类名相同,没有返回值,连void都不能写
构造方法可以重载(重载:方法名称相同,参数列表不同)
如果一个类中没有构造方法,那么编译器会为类加上一个默认的构造方法。
默认构造方法格式如下:
public 类名() {
}
如果手动添加了构造器,那么默认构造器就会消失。
建议代码中将无参构造器(空构造器)写出来。
三:要点:
1.通过new关键字调用!
2.构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。
3.如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加!
4.构造器的方法名必须和类名一致!
class Point{ //成员变量和类一起创建,对应于类对象的属性
double x,y;
double m;
//构造方法(又叫构造器),方法名称要和类名保持一致
public Point(double _x,double _y) {
x = _x; //也可以用 this.x 代替
y = _y; //构造器有返回值,不能用return返回某个值
}
public Point(){
}
public double getDistance (Point m){//普通方法 //如果我们没有自己定义一个构造器,系统会自己定义一个无参的构造器。如果已定义系统不会自己添加。
return Math.sqrt((x-m.x) * (x - m.x) + (y - m.y) * (y - m.y));
}
}
public class TextConstructor {
public static void main(String[] args) {
Point p=new Point(3.0,4.0); //用new调用构造器,创建对象且具有属性和方法,再次使用时不必再定义
Point o=new Point(0.0,0.0);
//Point p2=new Point();
Object ob=new Object();
System.out.println(ob.toString());
System.out.println(p.getDistance(o));
}
}
运行结果
5.0