= 객체가 될 때 필드를 초기화 하는 역할
ex) 반드시 이름을 가지도록 하려면 클래스를 만들어야함
public class Car{
String name;
int number;
public Car(String n){ //이름이 반드시 포함되어야 한다
name = n;
}
}
// 아래와 같이 인스턴스를 생성함
public class CarExam2{
public static void main(String args[]){
Car c1 = new Car("소방차");
Car c2 = new Car("구급차");
//Car c3 = new Car(); // 컴파일 오류가 발생합니다.
System.out.println(c1.name);
System.out.println(c2.name);
}
}
= 현재 객체, 자기 자신을 뜻한다.
public class Car{
String name;
int number;
public Car(String name){
this.name = name; // this를 써서 필드 네임과 매개변수를 구별한다. (매개변수 값을 필드에 대입)
}
}
= 매개변수의 유형(타입, 개수)을 다르게 하여 같은 이름의 메소드를 여러개 사용할 수 있게 함
ex)
class MyClass2{
public int plus(int x, int y){
return x+y;
}
public int plus(int x, int y, int z){
return x + y + z;
}
public String plus(String x, String y){
return x + y;
}
}
= 생성자의 매개변수의 유형을 다르게 하여 같은 이름의 생성자를 여러개 가질 수 있다.
생성자도 메소드와 마찬가지로 여러개를 선언할 수 있다.
매개변수의 수와 타입이 다르다면 여러개의 생성자를 선언할 수 있다.
ex)
public class Car {
String name;
int number;
Car(String name, int number) {
this.name = name;
this.number = number;
}
Car(){ //초기화 할때 사용, 코드 중복 피함
this("이름없음", 0);
}
Car(String name){ //이름만 받고 숫자는 초기화
this.name = name;
this.number = 0;
}
}
= 서로 관련있는 클래스 또는 인터페이스를 묶어놓음, 클래스들이 필요할 때만 사용될 수 있도록 하고, 클래스를 패키지 이름과 함께 계층적인 형태로 사용함으로써 다른 그룹에 속한 클래스와 발생할 수 있는 클래스 이름간의 충돌을 막아줌으로 클래스의 관리를 편하게 해준다.
com.eightcruz.javastudy.Hello
= 부모 클래스가 가진 것을 자식 클래스에서 쓸 수 있게 해주는 것을 말함, extends 사용
public class Car{ //부모 클래스
public void run(){
System.out.println("달리다.");
}
}
// 상속 받아 run도 사용 가능하다
public class Bus extends Car{ //자식 클래스에 상속
public void ppangppang(){
System.out.println("빵빵");
}
}
public class BusExam{
public static void main(String args[]){
Bus bus = new Bus();
bus.run();
//Bus class 는 아무런 코드를 가지지 않는다. 그럼에도 run 이라는 메소드를 사용하는데 문제가 발생되지 않는다.
}
}
Bus는 Car에서 물려받은 run메소드와 ppangppang메소드를 사용
부모가 가지고 있는 메소드외에 추가로 메소드를 선언하는 것을 확장하였다고 표현