본문 바로가기
수업 문제(국비 지원)/Java

[JAVA] 2022.09.07 - 내부 클래스

by byeolsub 2023. 4. 29.

문제 : 
  Outer10클래스의 내부 클래스 Inner1, inner2 의 멤버변수 iv,cv의 값 출력되도록
  구동 클래스를 완성하시오
    [결과]
    Outer10.Inner1.iv:100
    Outer10.Inner1.cv:10
    Outer10.Inner2.iv:200
    Outer10.Inner2.cv:20
package chap11;

class Outer10 {
    int iv;
    static int cv;

    class Inner1 extends Object {
		int iv = 100;
		static final int cv = 10;
        
	}
    static class Inner2 {
		int iv = 200;
		static int cv = 20;
	}

}
public class Test1 {
	public static void main(String[] args) {
		Outer10.Inner1 ii = new Outer10().new Inner1();
		System.out.println("Outer10.Inner1.iv:" + ii.iv);
		System.out.println("Outer10.Inner1.cv:" + Outer10.Inner1.cv);
		Outer10.Inner2 ii2 =new Outer10.Inner2();
		System.out.println("Outer10.Inner2.iv:" + ii2.iv);
		System.out.println("Outer10.Inner2.cv:" + Outer10.Inner2.cv);
	}
}

문제 : 
결과가 다음과 같이 나오도록 프로그램 완성하기
 
[결과] 
지역 변수 value=30
내부클래스 객체의 멤버 value=20
외부클래스 객체의 멤버 vlaue=10
package chap11;

class Outer11 {
	int value = 10;
	class Inner {
		int value = 20;
		void method1() {
			int value = 30;
			System.out.println("지역 변수 value=" + value);
			System.out.println("내부클래스 객체의 멤버 value=" +Outer11.this.value );
			System.out.println("외부클래스 객체의 멤버 value=" + Outer11.Inner.this.value);
		}
	}
}
public class Test2 {
	public static void main(String[] args) {
		new Outer11().new Inner().method1();      
	}
}

문제 : 
학생클래스의 객체중 학번과 이름이 같다면 같은 학생이 되도록 Student 클래스 수정하기
 [결과]
[학번=100, 이름=홍길동,전공=경영]과 [학번=100, 이름=홍길동,전공=컴공]는 다른 객체입니다.
[학번=100, 이름=홍길동,전공=경영]과 [학번=100, 이름=홍길동,전공=컴공]학생은 같은 학생입니다.
package chap11;
/*
학생클래스의 객체중 학번과 이름이 같다면 같은 학생이 되도록 Student 클래스 수정하기
 [결과]
[학번=100, 이름=홍길동,전공=경영]과 [학번=100, 이름=홍길동,전공=컴공]는 다른 객체입니다.
[학번=100, 이름=홍길동,전공=경영]과 [학번=100, 이름=홍길동,전공=컴공]학생은 같은 학생입니다. 
 */
class Student {
	int studno;
	String name;
	String major;
	public Student(int studno, String name, String major) {
		this.studno = studno;
		this.name = name;
		this.major = major;
	}
    @Override
    public boolean equals(Object obj) {
        if(obj instanceof Equal) {
            Equal e = (Equal)obj;
            return e.name == name; 
        } else return false;
    }
    @Override
    public String toString(){
        return "[학번="+studno+", 이름 ="+name+",전공="+major+"]";
    }
    @Override
    public int hashCode() {
        return studno;
    }
}
public class Test3 {
	public static void main(String[] args) {
		Student s1 = new Student(100,"홍길동","경영");
		Student s2 = new Student(100,"홍길동","컴공");
		if(s1 == s2) {
			System.out.println(s1+"과 "+s2+"는 같은 객체입니다.");
		} else {
			System.out.println(s1+"과 "+s2+"는 다른 객체입니다.");
		}
		if(s1.equals(s2)) {
			System.out.println(s1+"과 "+s2+"학생은 같은 학생입니다.");
		} else {
			System.out.println(s1+"과 "+s2+"학생은 다른 학생입니다.");
		}
	}
}