入门
一般来说,如果没有特别说明,构造方法是无属性的,在实例化时由系统自动处理。
Hero a = new Hero();//上一节代码,构造方法没有属性
不过我们可以重写构造方法,来实现一些效果,例如赋值初始化或者啥的。
public class Hero {
//属性
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
//方法
void attack() {
System.out.println("正在攻击");
}
//构造方法
Hero(String name) {
this.name = name;
System.out.println("my name is" + name);
}
public class Test {
public static void main(String []args) {
Hero a = new Hero("盖伦");//新建一个类
}
}
(附注:this 和 C++ 类似,都是指向自己这个类)
默认构造方法
在自己没有定义构造方法的时候,系统会自动生成一个没有参数的构造方法。不过如果你写了一个或多个构造方法,那这个默认的就失效了。
public class Hero {
//属性
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
//方法
void attack() {
System.out.println("正在攻击");
}
//构造方法
Hero(String name) {
this.name = name;
System.out.println("my name is" + name);
}
public class Test {
public static void main(String []args) {
Hero a = new Hero("盖伦");//成功
Hero b = new Hero();//失败,因为这个构造方法不存在了
}
}
多个构造方法(方法重载)
一个类可以拥有多个构造方法,如下:
public class Hero {
//属性
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
//方法
void attack() {
System.out.println("正在攻击");
}
//构造方法
Hero(){
//空的,和系统默认构造方法一致
}
Hero(String name) {
this.name = name;
System.out.println("my name is" + name);
}
Hero(String name, float hp) {
this.name = name;
this.hp = hp;
System.out.println("my name is" + name);
System.out.printf("my name is %f\n", hp);
}
public class Test {
public static void main(String []args) {
Hero a = new Hero();
Hero b = new Hero("盖伦");
Hero c = new Hero("盖伦", 200.0);
}
}
这被称作重载,不只是构造方法,普通的成员方法也可以这么写(例如系统库的 print系列就提供了数不胜数的重载方法)。