// 더이상 한 클래스가 메인 메소드까지 가지고 있지 않게된다.
// 한 클래스는 그 클래스의 객체가 어떤 필드와 메소드를 가지고 있을지 적어주고
// 다른 클래스에서 메인 메소드를 만들어서 그 안의 객체를 만들고 그 객체를 컨트롤하게 된다.
public class Car {
//Car에 필요한 정보: 번호판 번호, 종류, 색상, 연식
String plateNumber;
String type;
String color;
int year;
boolean isOn;
//Car의 객체들이 공통적으로 가질 기능: 시동걸기, 시동끄기
public void turnOn() {
isOn = true;
}
public void turnOff() {
isOn = false;
}
public Car(String plateNumber, String type, String color) {
this.plateNumber = plateNumber;
this.type = type;
this.color = color;
}
public Car() {
this.plateNumber = "기본생성자로 생성된 차량번호";
this.type = "기본생성자로 생성된 종류";
this.color = "기본 생성자로 생성된 색상";
}
public String toString() {
//리턴을 할 때 우리가 변수 하나에 값을 담아서 연산을 해서
//보내줄 수 있고
//지금처럼 객체의 내부 필드값들만 보내주는 정도라면
//리턴에 곧장 적어줘도 된다.
//즉, 리턴에 들어갈 값을 구하는 코드가 한줄보다 많으면 변수를 만들어서
//거기에 넣어서 return하고
//한줄로도 코드가 나오면 그냥 return에 그 코드를 적어줘도 된다.
return "차량번호: "+plateNumber+", 차량종류: "+type+", 차량색상:"+color+", 연식:"+year;
}
// equals 메소드 오버라이딩을 해보자
// 우리는 차량 번호와 차량 종류가 같으면 같은 차량이라고 할 것.
public boolean equals(Object o) {
//우리가 파라미터를 Object o라고 했기 때문에
//이 메소드는 파라미터로 클래스 변수면 어떤 클래스 변수든 다 파라미터로 받아들일 수 있다.
//따라서 우리는 제일 먼저 파라미터로 넘어온 o가
//이 Car클래스의 객체인지부터 확인해야 하고
//만약 Car클래스의 객체가 맞다면
//명시적 형변환을 통해서 임시로 Car객체로 만들어 주어야 한다
//해당 클래스의 객체인지 확인해야 할 때에는 instanceof라는 예약어를 통해서 하면 된다
if(o instanceof Car) {//만약 o가 Car클래스의 객체라면 true, 아니면 false가 나온다.
//만약 다른 클래스 객체이면 우리가 명시적 형 변환을 하면 문제가 생길 수 있지만
// 같은 클래스라면? 명시적 형변환을 하더라도 아무런 문제가 없다!
Car c = (Car)o;
//이제 이 메소드를 실행 한 객체의 정보와 c의 정보를 비교해서
// 차량번호와 차량 종류가 일치하면 return true를 하면 된다
if(this.plateNumber.contentEquals(c.plateNumber) && this.type.contentEquals(c.type)) {
return true;
}
}
return false;
}
}
'JAVA' 카테고리의 다른 글
Class 컨닝페이퍼 (0) | 2020.04.23 |
---|---|
Car // 상세 (0) | 2020.04.23 |
(별찍기) 마름모 공백 별 (1) | 2020.04.23 |
(별찍기) 마름모 (0) | 2020.04.23 |
(별찍기) 마름모 절반 세로 왼쪽부분 (0) | 2020.04.23 |