0401에 한 MyIntArray 클래스를 활용한다.
인덱스 0 1 2 3 4
배열값 1 2 3 4 5
배열의 특정 인덱스(2)에 삭제가 일어나면
인덱스 0 1 2 3 4
배열값 1 2 4 5 5
즉, 삭제가 된 배열 값을 제외하고 앞으로 이동 → 뒤에 비어있다고 가정
삭제하고자하는 index=2면 delectInt(2);
index2에 index3을, index3에 index4를 저장하게 반복문으로 구현해주고,
출력은 길이 인덱스를 별도로 leng으로 선언해주어
삭제가 일어나면 -1, 추가가 일어나면 +1하면
아래와 같이 출력된다.



원래 배열 arr보다 길이가 5만큼 더 큰 copyArr배열을 만들고,
copyArr에 arr값을 복사한다.
copyArr는 arr보다 5만큼 더 큰 배열이므로, 추가된 숫자를 입력해줄 수 있다.
copyArr[leng]=n;
leng+1(copyArr.length)로 재설정 해준뒤
arr 가 가리키는 배열을 copyArr로 설정해준다. → 무한 배열(+5) 생성

MyIntArray.java
package ex0401;
public class MyIntArray {
// 멤버변수: 정수배열
private int[] arr;
private int leng;
// 기본생성자를 사용해서 정수 5개를 저장할 수 있는 배열 할당
MyIntArray(){
this.arr = new int[5];
this.leng = arr.length;
}
// 특정 인덱스의 요소를 얻어내는 getter
public int getter(int index) {
return arr[index];
}
// 특정 인덱스의 요소를 저장하는 getter
public void setter(int index, int n) {
arr[index]=n;
}
// 배열에 저장되어 있는 모든 값 출력
public void printArray() {
System.out.print("배열: [ ");
for(int i=0; i<leng; i++)
System.out.print(arr[i]+" ");
System.out.print("] 길이 "+arr.length);
System.out.println(" | leng"+leng);
}
public void deleteInt(int index) {
if(leng==0)
System.out.println("배열이 비어있습니다.");
else {
for(int i=index; i<leng-1; i++) {
arr[i] = arr[i+1];
}
leng--;
}
}
public void addInt(int n) {
if(leng==arr.length) {
System.out.println("배열이 다찼습니다. 배열 길이를 5만큼 더 늘리겠습니다.");
// copyArr배열 생성해서 copy
int[] copyArr = new int[leng+5];
// arr 배열 값을 copyArr에 복사
for(int i=0; i<leng; i++) {
copyArr[i]=arr[i];
}
copyArr[leng]=n;
// leng을 leng+5(copyArr.length)로 증가
leng=leng+1;
// arr가 가리키는 지점을 copyArr로 재지정
this.arr = copyArr;
}
else {
arr[leng]=n;
leng++;
}
}
}
public void printLeng() {
System.out.println("");
System.out.print("배열길이: "+arr.length);
System.out.print(" | 입력 갯수: "+leng);
System.out.println(" | 남은 공간: "+(arr.length-leng));
System.out.println("---------------------------------------");
}

public boolean searchInt(int n) {
boolean flag=false;
for(int i=0; i<leng; i++)
if(arr[i]==n) {
flag = true;
break;
}
return flag;
}

public void removeAll() {
for(int i=0; i<leng; i++)
arr[i]=0;
System.out.println("배열의 모든 값을 지웠습니다..");
leng=0;
}

MyArray() 부모
MyIntArray() 자식1
MyFloatArray() 자식2
MyCharArray() 자식3
Person 클래스
멤버변수: 이름 name 나이 age
멤버함수: eat떡국
Ejrrnr (떡국)클래스
name="떡국"

라면 클래스
칼로리 1000
사람 클래스에 몸무게 추가
라면 먹으면 1/칼로리만큼 몸무게가 늘어난다.
public void eatRamen(Ramen r) {
weight+=1/r.calorie;
System.out.println(name+"이 "+r.name+"을 먹었습니다.");
}
eatEjrrnr 과 eat Ramen 을 하나로 합치기
public void eat(Food f) {
if(f instanceof Ejrrnr) {
age++;
System.out.println(name+"이 "+f.name+"을 먹었습니다. "+age+"살이 되었습니다.");
}
else if(f instanceof Ramen) {
weight+=1/((Ramen) f).calorie;
System.out.println(name+"이 "+f.name+"을 먹었습니다. "+weight+"kg이 되었습니다.");
}
}
PersonEatTest.java
package ex0402_2;
public class PersonEatTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p = new Person("홍길동",10,60.0f);
Ejrrnr e = new Ejrrnr();
Ramen r = new Ramen();
//p.eatEjrrnr(e);
//p.eatRamen(r);
p.eat(e);
p.eat(r);
}
}

Person.java
package ex0402_2;
public class Person {
String name;
int age;
float weight;
Ejrrnr e;
Person(String name, int age, float weight){
this.name=name;
this.age=age;
this.weight=weight;
}
// eatEjrrnr, eatRamen
/*
public void eatEjrrnr(Ejrrnr e) {
age++;
System.out.println(name+"이 "+e.name+"을 먹었습니다.");
}
public void eatRamen(Ramen r) {
weight+=1/r.calorie;
System.out.println(name+"이 "+r.name+"을 먹었습니다.");
}*/
public void eat(Food f) {
if(f instanceof Ejrrnr) {
age++;
System.out.println(name+"이 "+f.name+"을 먹었습니다. "+age+"살이 되었습니다.");
}
else if(f instanceof Ramen) {
weight+=1/((Ramen) f).calorie;
System.out.println(name+"이 "+f.name+"을 먹었습니다. "+weight+"kg이 되었습니다.");
}
}
}
Ramen.java
package ex0402_2;
public class Ramen extends Food{
float calorie;
Ramen(){
this.name="라면";
this.calorie=1000;
}
}
Ejrrnr.java
package ex0402_2;
public class Ejrrnr extends Food{
Ejrrnr(){
this.name="떡국";
}
}
Food.java
package ex0402_2;
public class Food {
String name;
}
완성되지 않은 메서드(미완성): 블록이 없다.
인스턴스는 만들 수 없으나 상속은 가능하다.
상속받은 자식클래스에서는 반드시 구현해야한다. (!!약속!!)