=> 같은 클래스의 모든 객체가 같은 값을 가지고 있다면 그 값을 클래스에 저장하면 메모리를 아낄수 있다!
package ex03.abstraction02;
public class Mouse {
public String name;
public int age;
public static int countOfTail = 1; // 쥐 , 제리 , 미키의 꼬리는 모두 1개이므로 같은 유형의 모든 객체가 같은 값을 가지고 있다면 클래스 속성에 저장
public void sing() {
System.out.println(name +" 찍찍!!");
}
}
package ex03.abstraction02;
public class MouseDriver {
public static void main(String[] args) {
Mouse.countOfTail = 1;
Mouse mickey = new Mouse();
Mouse jerry = new Mouse();
Mouse mightyMouse = new Mouse();
//객체 참조 변수.속성명으로 접근
System.out.println(mickey.countOfTail);
System.out.println(jerry.countOfTail);
System.out.println(mightyMouse.countOfTail);
//클래스명.속성명으로 접근
System.out.println(Mouse.countOfTail);
}
}
클래스 멤버 = 정적 멤버 = static 멤버
- static
- 클래스 멤버 속성
모든 객체들이 같은 값을 가질 때 사용하는 것이 정석 ,
T메모리의 스태틱 영역에 클래스가 배치될 때 클래스 내부에 메모리 공간이 확보
- 클래스 멤버 메서드
객체들의 존재 여부에 관계없이 쓸 수 있는 메서드
객체 멤버 = 인스턴스 멤버
- 객체 멤버 속성
속성명만 있지 실제 메모리 공간은 확보하지 않는다. 메모리 공간은 힙 영역에 객체가 생성되면 할당
- 객체 멤버 메서드
클래스 속성과 객체 속성은 별도의 초기화를 해주지않아고 정수형은 0 , 실수형은 0.0 , 논리형은 false , 객체는 null 로 초기화
지역 변수는 별도로 초기화
package ex03.inheritance01;
public class 동물 {
String myClass; // 객체 변수
public 동물() { // 생성자
myClass = "동물";
}
void showMe() { // 객체 메서드
System.out.println(myClass);
}
}
package ex03.inheritance01;
public class 포유류 extends 동물{
public 포유류() {
myClass = "포유류";
}
}
package ex03.inheritance01;
public class 조류 extends 동물 {
public 조류() {
myClass = "조류";
}
}
package ex03.inheritance01;
public class 고래 extends 포유류 {
public 고래() {
myClass = "고래";
}
}
package ex03.inheritance01;
public class 박쥐 extends 포유류{
public 박쥐() {
myClass = "박쥐";
}
}
package ex03.inheritance01;
public class 참새 extends 조류{
public 참새() {
myClass = "참새";
}
}
package ex03.inheritance01;
public class 펭귄 extends 조류 {
public 펭귄() {
myClass = "펭귄";
}
}
package ex03.inheritance01;
public class Driver01 {
public static void main(String[] args) {
동물 animal = new 동물();
포유류 mammalia = new 포유류();
조류 bird = new 조류();
고래 whale = new 고래();
박쥐 bat = new 박쥐();
참새 sparrow = new 참새();
펭귄 penguin = new 펭귄();
//상위 클래스에서만 showme()메서드를 구현했지만 하위 클래스 객체에서 showMe() 사용할 수 있다. => 재사용
animal.showMe();
mammalia.showMe();
bird.showMe();
whale.showMe();
bat.showMe();
sparrow.showMe();
penguin.showMe();
}
}
package ex03.inheritance01;
public class Driver02 {
public static void main(String[] args) {
// 하위클래스는 상위클래스이다.
동물 animal = new 동물();
동물 mammalia = new 포유류();
동물 bird = new 조류();
동물 whale = new 고래();
동물 bat = new 박쥐();
동물 sparrow = new 참새();
동물 penguin = new 펭귄();
animal.showMe();
mammalia.showMe();
bird.showMe();
whale.showMe();
bat.showMe();
sparrow.showMe();
penguin.showMe();
}
}
package ex03.inheritance01;
public class Driver03 {
public static void main(String[] args) {
// 하위클래스는 상위클래스이다.
동물[] animals = new 동물[7];
animals[0] = new 동물();
animals[1] = new 포유류();
animals[2] = new 조류();
animals[3] = new 고래();
animals[4] = new 박쥐();
animals[5] = new 참새();
animals[6] = new 펭귄();
for(int i=0;i<animals.length;i++) {
animals[i].showMe();
}
}
}