入门
一般来说,如果没有特别说明,构造方法是无属性的,在实例化时由系统自动处理。
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系列就提供了数不胜数的重载方法)。
