1. 클래스
package JumpTo;
class Animal {
String name; // 객체 변수 = 인스턴스 변수 = 멤버 변수 = 속성 (클래스에 선언된 변수)
public void setName(String name) {
// setName 메소드 내부에 사용된 this는
// Animal 클래스에 의해 생성된 객체를 지칭한다.
// 만약 Animal cat = new Animal()과 같이 cat이라는 객체를 만들고
// cat.setName("body")와 같이 cat 객체에 의해 setName 메소드를 호출하면
// setName 메소드 내부에 선언된 this는 바로 cat 객체를 지칭한다.
// 따라서 this.name = "body"는
// cat.name = "body"로 해석된다!
this.name = name; // this.name = "body";
}
}
public class Sample {
public static void main(String[] args) {
Animal cat = new Animal(); // cat이라는 객체 만듦
cat.setName("body"); // 메소드 호출
Animal dog = new Animal();
dog.setName("happy");
System.out.println(cat.name); // body
System.out.println(dog.name); // happy
// name 객체 변수는 공유되지 않는다는 것을 확인할 수 있다!
// 객체 지향적이라는 말도 결국 이 객체 변수의 값이 독립적으로 유지되기 때문에 가능한 것이다.
// 객체 변수 값은 공유되지 않지만 static을 이용하면 객체 변수를 공유하도록 만들 수도 있다.
}
}
2. 메소드
package JumpTo;
public class Sample {
int a; // 객체변수 a
void varTest(Sample sample) {
sample.a++;
}
public static void main(String[] args) {
Sample sample = new Sample();
sample.a = 1;
sample.varTest(sample);
System.out.println(sample.a); // 2 출력
}
}
package JumpTo;
public class Sample {
int a; // 객체변수 a
void varTest() {
this.a++; // this를 활용
}
public static void main(String[] args) {
Sample sample = new Sample();
sample.a = 1;
sample.varTest();
System.out.println(sample.a); // 똑같이 2 출력
}
}
3. 생성자
package JumpTo;
class Animal {
String name;
void setName(String name) {
this.name = name;
}
}
class Dog extends Animal {
void sleep() {
System.out.println(this.name + " zzz");
}
}
class HouseDog extends Dog {
// 메소드명이 클래스명과 동일하고 리턴 자료형을 정의하지 않는 메소드를
// 생성자(Constructor)라고 한다.
// 생성자의 규칙
// 1. 클래스명과 메소드명이 동일하다.
// 2. 리턴타입을 정의하지 않는다.(void도 사용하지 않는다.)
HouseDog(String name) {
this.setName(name);
}
void sleep() {
System.out.println(this.name + " zzz in house");
}
void sleep(int hour) {
System.out.println(this.name + " zzz in house for " + hour + "hours");
}
}
public class Sample {
public static void main(String[] args) {
/*HouseDog houseDog = new HouseDog();
houseDog.setName("happy");
houseDog.sleep();
houseDog.sleep(3);*/
HouseDog dog = new HouseDog("happy");
System.out.println(dog.name); // happy 출력
}
}
package JumpTo;
class Animal {
String name;
void setName(String name) {
this.name = name;
}
}
class Dog extends Animal {
void sleep() {
System.out.println(this.name + " zzz");
}
}
class HouseDog extends Dog {
HouseDog(String name) {
this.setName(name);
}
// 생성자 오버로딩
HouseDog(int type) {
if (type == 1) {
this.setName("yorkshire");
} else if (type == 2) {
this.setName("bulldog");
}
}
void sleep() {
System.out.println(this.name + " zzz in house");
}
void sleep(int hour) {
System.out.println(this.name + " zzz in house for " + hour + "hours");
}
}
public class Sample {
public static void main(String[] args) {
HouseDog happy = new HouseDog("happy");
HouseDog yorkshire = new HouseDog(1);
System.out.println(happy.name); // happy 출력
System.out.println(yorkshire.name); // yorkshire 출력
}
}
'~2023.02 > Java' 카테고리의 다른 글
[자바의 정석] 지네릭스(Generics) (0) | 2022.06.25 |
---|---|
자바 기초 _ [토픽2] 자바 객체 지향 프로그래밍 _ 객체 설계하기 (0) | 2021.12.30 |
자바 기초 _ [토픽2] 자바 객체 지향 프로그래밍 _ 객체 만들기 (0) | 2021.12.29 |
자바 기초 _ [토픽1] 자바 왕기초 _ 배열 (0) | 2021.12.29 |
자바 기초 _ [토픽1] 자바 왕기초 _ 조건문과 반복문 (0) | 2021.12.29 |