public class Car{
String carName; //전역변수 (class영역에서 선언했기 때문에 전체적으로 사용할 수 있는 변수)
String carColor;
String maker;
int speed;
public Car() { //기본 생성자 생성
//carName = "아반떼";
//carColor = "흰색";
//maker = "현대";
this ("아반떼", "흰색", "현대");
//speed = 10;
}
// carName만 외부에서 받은 값으로 하고 싶다면?
public Car(String carName) { // 왜 cn이 아닌 carName으로 했을 때, null값이 나오는가? 전역변수의 carName은 class영역에 있고, 지역변수의 carName은 메소드 영역에 있기 때문에 같은 이름이 지정가능하다. 지역변수가 전역변수보다 먼저 적용되기 때문에
//this.carName = carName; //.을 찍어 새로운 객체가 형성되기 때문에 자기 자신을 참조하기 위해서는 this를 붙여야 한다. 지역변수와 전역변수가 같을 경우 반드시 this를 명시해주어야 한다.
//carColor = "흰색"; //앞에 this가 생략되어 있음
//maker = "현대";
this (carName, "흰색", "현대");
}
// carName, carColor만 외부에서 받은 값으로 하고 싶다면?
public Car(String carName, String carColor) { //타입이나 개수가 달라야 함!! 그냥 String cn하면 x 컴퓨터는 cn,cc를 인식하는 것이 아니라 같은 String으로 인식하기 때문!!
//this.carName = carName;
//this.carColor = carColor;
//maker = "현대";
this(carName,carColor,"현대");
}
// 초기화 내용(중복 코드)을 몰아서 작성한 생성자 this()
public Car(String carName, String carColor, String maker) { //타입이나 개수가 달라야 함!! 그냥 String cn하면 x 컴퓨터는 cn,cc를 인식하는 것이 아니라 같은 String으로 인식하기 때문!!
this.carName = carName;
this.carColor = carColor;
this.maker = maker;
}
void speedUp() { //접근제어자 생략 가능, ()안 인자값 생략 가능
speed += 10;
}
int speedUp(int speed) {
this.speed += speed;
return this.speed;
}
void speedDown() {
speed -= 10;
if(speed < 0)
//speed = 0;
stop(); //그냥 stop을 호출하면 됨
}
void stop() {
speed = 0;
}
}
public class CarUser{
public static void main(String[] args) {
Car car1 = new Car();
System.out.println("1. " + car1.maker + "에서 만든 " + car1.carColor + " " + car1.carName + "입니다. ");
car1.carName = "쏘나타";
car1.carColor = "남색";
car1.maker = "현대";
System.out.println("2. " + car1.maker + "에서 만든 " + car1.carColor + " " + car1.carName + "입니다. ");
System.out.println("속도를 5회증가!!!");
for (int i=0;i<5;i++)
car1.speedUp();
System.out.println("car1의 속도 : " + car1.speed);
System.out.println("속도를 150회증가!!!");
int s = car1.speedUp(150);
System.out.println("car1의 속도 : " + s);
Car car2 = new Car("제네시스"); //내가 원하는 이름을 지정해서 넣을 수 있다
System.out.println("3. " + car2.maker + "에서 만든 " + car2.carColor + " " + car2.carName + "입니다. ");
Car car3 = new Car("그랜저", "검정색");
System.out.println("4. " + car3.maker + "에서 만든 " + car3.carColor + " " + car3.carName + "입니다. ");
//기아에서 만든 빨간색 K5입니다.
Car car4 = new Car("K5", "빨간색", "기아");
System.out.println("5. " + car4.maker + "에서 만든 " + car4.carColor + " " + car4.carName + "입니다. ");
}
}
---------- run ----------
1. 현대에서 만든 흰색 아반떼입니다.
2. 현대에서 만든 남색 쏘나타입니다.
속도를 5회증가!!!
car1의 속도 : 50
속도를 150회증가!!!
car1의 속도 : 200
3. 현대에서 만든 흰색 제네시스입니다.
4. 현대에서 만든 검정색 그랜저입니다.
5. 기아에서 만든 빨간색 K5입니다.