[toc]
https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
# Constructor
**constructor is NOT method**
一個class會有constructor, 在建立object時被呼叫。
- 必須與class同名
- 沒有return-type
- 可以寫多個constructor, 但參數不能一樣
如果class沒有任何constructor,
implict constructor就會存在。無參數,無body
```java=
class Point {
public int x;
public int y;
}
```
it's actually...
```java=
class Point {
public int x;
public int y;
// implict constructor
public Point() {
}
}
```
因此我們來加一些constructor:
```java=
class Point {
public int x;
public int y;
public Point() {
x = -1;
y = -1;
}
public Point(int startX, int startY) {
x = startX;
y = startY;
}
}
//---------- in Main.java ----------
public class Main {
public static void main(String[] args) {
Point p = new Point();
System.out.println(p.x + " " + p.y); // -1 -1
Point p = new Point(100, 200);
System.out.println(p.x + " " + p.y); // 100 200
}
}
```
<!--
多個constructor:
```java=
//---------- in Ship.java ----------
public class Ship {
private String name;
public Ship(String name) { //a-custom-constructor
this.name = name;
}
public Ship() { //another-custom-constructor
this.name = "default name";
}
//getter & setter
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
//---------- in Main.java ----------
public class Main {
public static void main(String[] args) {
Ship s = new Ship("Britannic");
System.out.println(s.getName()); //"Britannic"
Ship s2 = new Ship();
System.out.println(s2.getName()); //"default name"
}
}
```
用constructor呼叫其他的constructor可以用this(...);
```java
public Ship(String name) { //a-custom-constructor
this.name = name;
}
public Ship() {
this("default name");
}
```
-->