构造器
构造器
默认构造器:
构建过程是从基类向外扩散的,所以基类在导出类可以访问它之前,就已经完成了初始化
package ch7_05;
class A{
public A(){
System.out.println("I am A");
}
}
class B{
public B(){
System.out.println("I am B");
}
}
public class C extends A{
B b = new B();
public static void main(String[] args)
{
new C();
}
}/* output:
I am A
I am B
*///~
带参数构造器
默认构造器编译器可以轻松调用它是因为不必考虑要传递什么样的参数的问题,但是如果没有默认的基类构造器,或者想调用一个带参数的基类构造器,就必须用关键字super显式地编写调用基类构造器的语句,并且配之以适当的参数
package object;
import static net.mindview.util.Print.*;
class Game{
Game(int i)
{
print("Game constructor");
}
}
class BoardGame extends Game{
BoardGame(int i)
{
super(i); //必须在构造器的第一行 super must consructor's first row
print("BoardGame constructor");
}
}
public class Chess extends BoardGame{
Chess()
{
super(1); //如果基类有默认构造器,导出类一定要用super()在第一行显示的调用基类的带参构造器
print("Chess constructor");
}
public static void main(String[] args)
{
Chess x = new Chess();
}
}/* output:
Game constructor
BoardGame constructor
Chess constructor
构造器重载
构造器可以认为它是个特殊的方法:无需声明返回值类型,如果声明了返回值类型则变成普通方法;
构造器的作用:构造器并不是创建对象,而是初始化实例,严格来说对象是new出来的;
构造器重载:完全类似于方法重载 -- 两同(同一个类、方法名相同)-- 一异(形参列表不同)
1 public class Monkey{
2 private String name;
3 private double weight;
4 private int age;
5
6 //提供带两个参数的构造器
7 public Monkey(String name , double weight){
8 this.name = name;
9 this.weight = weight;
10 }
11
12 //提供带三个参数的构造器,构造器的作用是用来初始化实例的
13 public Monkey(String name , double weight , int age){
14 this(name,weight);
15 this.age = age;
16 }
17
18 public void info(){
19 System.out.println("这是一只猴子,它的名字是:" + name +
20 ",体重是:" + weight + ",年龄是:" + age);
21 }
22
23 public static void main(String[] args){
24 Monkey m = new Monkey("小金刚",100);
25 m.info();
26 Monkey m2 = new Monkey("金刚",300,20);
27 m2.info();
28 }
29 }