본문 바로가기

Study Language/Java

java 4

복습

 

자기 클래스 안에서만 사용 할 수 있거나 자기 패키지 안에서만 사용 할 수 있거나 타패키지에있어도 자기 패키지에 상속받은 하위클래스에서 사용할수있거나 누구나 사용할 수 있거나 네가지의 접근 제어자를 통해서 사용

 

헤더 -> 함수의 특징 (시그니처)

input, output, 접근영역

 

static 인스턴스를 만들 필요없이 class.함수(); 로 실행 가능

클래스만의 함수로 사용 가능

변수에도 static을 집어 넣을 수 있음

 

static을 변수에 넣으면 모든 인스턴스 변수들이 클래스변수로서 작용할 수 있음

 

한번식 독서기록장을 업데이트 할 때 마다 인스턴스 필드를 넘겨주고 그 값은 계속해서 book이라는 클래스가 공유

 

재사용성을 확장시키기 위한 개념

똑같은 규격으로 input과 output

상속 받는 하위클래스마다 조금씩 달라질 때 interface라는 추상적인 개념으로 부모클래스를 만듦

최대한 추상적인 방식으로 규격을 맞춰줌

말 그대로 참고로 해서 만들기 위한 점검표

뭔가를 작성하지 않으면 디폴트가 기본제어자

퍼블릭으로 기본접근제어자가 설정 됨

 

상속을 시킬 때 상속을 하고나면 하위클래스에서 기존에 부모ㅡㄹ래스에서 있떤 함수들을 오버라이딩해서 자기들의 방식대로 사용

 

부모클래스에서 내가 만든대로 밑에 있는 클래스들에도 다 넘겨주고싶다면 final이라는 명령어를 사용해서

상속받은 클래스가 새로 우리가 만들어 놓은 실행문에 변경을 가할 수 없도록 여러개의 다양한 제어자

 

// 1. 동물원
// Zoo - 관리자 
// animalNum, zooKeeperNum -> 멤버 변수
// animalIn(), zooKeeperIn() 
// animalOut(), zooKeeperOut() 

// Animal -> abstact class, 구상 클래스, interface
// bark() -> ~~가 짖습니다
// bark(String ) -> ~~가 ~~라고 짖습니다.
// eat() -> 초식/육식/잡식 
// poop() -> final 

// Zookeeper - 사육사 
// feed(), play() - 놀아줍니다

 

animal.java

package zooEx;

public abstract class Animal extends Zoo {
	String name = "";
	String foodHabit = "";
	
	Animal(String name, String habbit) {
		this.name = name;
		this.foodHabit = habbit;
		super.animalIn();
	}
	
	public void bark() {
		System.out.println(this.name + "가 짖습니다.");
	};
	
	public void bark(String comment) {
		System.out.println(this.name + "가 " + comment + "라고 짖습니다.");
	};
	
	public void eat() {
		System.out.println(this.name + "은 " + this.foodHabit + " 동물입니다.");
	}
	
	public final void poop() {
		System.out.println(this.name + "가 배설합니다.");
	};
}

 

zoo.java

package zooEx;

public class Zoo {
    static int animalNum = 0; // 동물원에 있는 동물의 수
    static int zooKeeperNum = 0; // 동물원의 사육사 수
    
    // 동물이 동물원에 들어올 때 호출되는 메소드
    public void animalIn() {
        animalNum++;
        System.out.println("동물이 동물원에 들어왔습니다. 현재 동물 수: " + animalNum);
    }
    
    // 동물이 동물원에서 나갈 때 호출되는 메소드
    public void animalOut() {
        if (animalNum > 0) {
            animalNum--;
            System.out.println("동물이 동물원에서 나갔습니다. 현재 동물 수: " + animalNum);
        } else {
            System.out.println("더 이상 나갈 동물이 없습니다.");
        }
    }
    
    // 사육사가 동물원에 들어올 때 호출되는 메소드
    public void zooKeeperIn() {
        zooKeeperNum++;
        System.out.println("사육사가 동물원에 들어왔습니다. 현재 사육사 수: " + zooKeeperNum);
    }
    
    // 사육사가 동물원에서 나갈 때 호출되는 메소드
    public void zooKeeperOut() {
        if (zooKeeperNum > 0) {
            zooKeeperNum--;
            System.out.println("사육사가 동물원에서 나갔습니다. 현재 사육사 수: " + zooKeeperNum);
        } else {
            System.out.println("더 이상 나갈 사육사가 없습니다.");
        }
    }
    
}



/*
//1. 동물원
//Zoo - 관리자 
//animalNum, zooKeeperNum -> 멤버 변수
//animalIn(), zooKeeperIn() 
//animalOut(), zooKeeperOut() 

//Animal -> abstact class, 구상 클래스, interface
//bark() -> ~~가 짖습니다
//bark(String ) -> ~~가 ~~라고 짖습니다.
//eat() -> 초식/육식/잡식 
//poop() -> final 

//Zookeeper - 사육사 
//feed(), play() - 놀아줍니다
*/

 

zookepper.java

package zooEx;

public class Zookeeper extends Zoo{
	String name = "";
	
	Zookeeper(String name) {
		this.name = name;
		super.zooKeeperIn();
	}
	
	public void feed(NewAnimal animal) {
		System.out.println(name + "가 " + animal.name + "한테 읍식을 줍니다.");
	}

	public void play(NewAnimal animal) {
		System.out.println(name + "가 " + animal.name + "를 놀아줍니다.");
	}
}

zooTest.java

package zooEx;

public class ZooTest {
    public static void main(String[] args) {

    	NewAnimal lion = new NewAnimal("사자", "육식");
    	System.out.println(lion.name);
    	System.out.println(lion.foodHabit);
    	lion.bark();
    	lion.bark("하이");
    	lion.eat();
    	lion.poop();
    	DelAnimal(lion);
    	
    	System.out.println("------------------------------");
    	NewAnimal tiger = new NewAnimal("호랑이", "육식");
    	System.out.println(tiger.name);
    	
    	System.out.println("------------------------------");
    	NewZookeeper keeper1 = new NewZookeeper("keeper1");
    	keeper1.play(tiger);
    	keeper1.feed(tiger);
    	
    	System.out.println("------------------------------");
    	NewZookeeper keeper2 = new NewZookeeper("keeper2");
    	
    	System.out.println("------------------------------");
    	DelKeeper(keeper1);
    	DelKeeper(keeper2);
    }
    
    public static NewAnimal DelAnimal(NewAnimal animal) {
    	animal.animalOut();
    	animal = null;
    	return animal;
    }
    
    public static NewZookeeper DelKeeper(NewZookeeper keeper) {
    	keeper.zooKeeperOut();
    	keeper = null;
    	return keeper;
    }
}


class NewAnimal extends Animal {
	NewAnimal(String name, String habit) {
        super(name, habit);
    }
}

class NewZookeeper extends Zookeeper {
	NewZookeeper(String name) {
        super(name);
    }
}

 

 

 

 

print했을 때 글자가 깨진다면

인코딩문제.

 

file안에 a.txt가 ms.949로 되어있을 확률이 있음

 

Preferences - > Spelling -> window-949x UTF-8 후 저장

새로 다시 작성하면 문제 없이 실행가능