클래스와 객체 2-1

1. this 예약어

  • 생성된 인스턴스 스스로를 가르키는 예약어

class Birthday {
	int day;
	int month;
	int year;

	public void setYear(int year) {
		this.year = year; //this를 통해 매개변수의 year가 아닌 멤버변수의 year를 나타냄을 표시
	}
	
	public void printThis() {
		System.out.println(this);//인스턴스의 주소 값을 출력
	}
}

public class ThisExample {
	public static void main(String[] args) {
		Birthday b1 = new Birthday();
		Birthday b2 = new Birthday();
		
		System.out.println(b1);
		b1.printThis();
		System.out.println(b2);
		b2.printThis();
		/*
		출력 결과 
		Birthday@15db9742
		Birthday@15db9742
		Birthday@6d06d69c
		Birthday@6d06d69c
		*/
	}
}
  • 생성자에서 다른 생성자를 호출
class Person{
	String name;
	int age;
	
	//this를 이용한 생성자 가져오기
	public Person() {
		this("이름없음", 1); //생성자 중 매개변수의 개수와 타입이 맞는 것과 자동 매핑
	}
		
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
}

public class CallAnotherConst {
	public static void main(String[] args) {
		Person p1 = new Person();
		System.out.println(p1.name + p1.age);
	}
}
  • 자신의 주소를 반환함
class Return {
	//인스턴스 주소값을 반환
	public Return returnSelf() {
		return this;
	}
}

public class ReturnSelf {
	public static void main(String[] args) {
		Return re = new Return();
		System.out.println(re.returnSelf());
		//결과: thisex.Return@15db9742
	}
}

객체 간의 협력

  • 예제
//학생 클래스
public class Student {
	String studentName;
	int grade;
	int money;
	
	public Student(String studentName, int money) {
		this.studentName = studentName;
		this.money = money;
	}
	
    //학생 객체와 버스 객체 간의 협력
	public void takeBus(Bus bus) {
		bus.take(1000);
		money -= 1000;
	}
	
    //학생 객체와 지하철 객체 간의 협력
	public void takeSubway(Subway subway) {
		subway.take(1500);
		money -= 1500;
	}
	
	public void showInfo() {
		System.out.println(studentName + "님의 남은 돈은 " + money + "원입니다.");
	}
}
//버스 클래스
public class Bus {
	int busNumber;
	int passengerCount;
	int money;
	
	public Bus(int busNumber) {
		this.busNumber = busNumber;
	}
	
	public void take(int money) {
		this.money += money;
		passengerCount++;
	}
	
	public void showInfo() {
		System.out.println("버스 " + busNumber +"번의 승객은 " + passengerCount + "명이고, 수입은 " + money + "원입니다.");
	}
}
//지하철 클래스
public class Subway {
	int lineNumber;
	int passengerCount;
	int money;
	
	public Subway(int lineNumber) {
		this.lineNumber = lineNumber;
	}
	
	public void take(int money) {
		this.money += money;
		passengerCount++;
	}
	
	public void showInfo() {
		System.out.println("지하철 " + lineNumber +"번의 승객은 " + passengerCount + "명이고, 수입은 " + money + "원입니다.");
	}
}
//main구문
public class TakeTrans {
	public static void main(String[] args) {
		Student james = new Student("James", 5000);
		Student tomas = new Student("Tomas", 5000);
		
		Bus bus100 = new Bus(100);
		james.takeBus(bus100);
		james.showInfo();
		bus100.showInfo();
		
		Subway subwayGreen = new Subway(2);
		tomas.takeSubway(subwayGreen);
		tomas.showInfo();
		subwayGreen.showInfo();
	}
}

태그:

카테고리:

업데이트: