17일차 강의 정리


소스(super - 부모생성자의 명시적 호출)

오버라이드의 경우 접근제한자의 범위가 작아진경우 오류

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//final class Pl01{        //final을 통하면 상속이 불가능
class Pl01{
    double pi=3.14;        //final이 필드에 붙으면 상수화. 상속가능
    
    Pl01(){
        System.out.println("Pi01 객체 생성");
    }
    Pl01(double pi){
        this.pi=pi;
        System.out.println(pi+"Pi01 객체 생성2");
    }
    
    public final void prn(){    //final을 통하면 오버라이드기능 금지.이대로 사용해라
        System.out.println("첫번째 기능");
    }
    public void prn(String st){
        System.out.println(st+"는(은) 두번째 기능");
    }
}
 
public class Ex01 extends Pl01{
 
    double pi=3.22222;        //상수화는 오버라이드 가능
    
    Ex01(){        //생성자
        super(3.3333);        //명시하지않으면 숨어있는다.부모생성자 명시적 호출
        System.out.println("Ex01 객체 생성");
//        super();        //생성자의 최상단에와야한다
    }
 
    public static void main(String[] args) {
        Ex01 me = new Ex01();
        me.prn();
        me.prn("이것");
        
    }//main end
 
    public void prn(String st){        //오버라이드이면 접근제한자 범위가 확장되어야한다 (줄어드는 경우 오류)
        System.out.println(pi+st+" 수정된 기능");
    }
}//class end
cs

결과

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Cl02{
    int a = 4;
    
    public Cl02(){        //생성자란 객체 생성하고 최초에 할일을 명시하는역할이다.(일반적으로 초기화작업)
        System.out.println("슈퍼클래스()~");
    }
    public Cl02(int a){
        this();        //없으면 Cl02()의 print는 사용하지않는다
        System.out.println("슈퍼클래스()~"+a);
    }
}//class Cl02 end
 
public class Ex02 extends Cl02{
    int a = 5;
    public Ex02(int a){
        super(a);
        System.out.println("내클래스");
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Ex02 me = new Ex02(2);
//        Ex02 me2 = new Ex02(3);
        System.out.println(me.getA());
 
    }//main end
    int getA(){
//        return super.a;    //4
        return this.a;    //5
    }
}//class end
cs

결과


캡슐화&다형성

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
class Man{        //사람 클래스
    String name;
    
    Man(String name){
        this.name=name;
    }
    void callByName(){
        System.out.println("나는 "+name+"입니다.");
    }
}
 
class Sol extends Man{    //군인 클래스,사람 클래스 상속
    String tree;
    Sol(String name,String tree){
        super(name);
        this.tree=tree;
    }
    void callbySol(){
        System.out.print(tree+",");
        callByName();
    }
}
 
class BMan extends Man{    //회사원 클래스,사람 클래스 상속
    String tel;
    String comp;
    String name;
    
    BMan(String name,String tel,String comp){
        super(name);
        this.tel = tel;
        this.comp = comp;
    }
    BMan(String name,String tel,String comp,String newName){
        this(name,tel,comp);
        this.name=newName;
    }
    void callByName(){    //오버라이드
        System.out.println("나는 "+name+"입니다.");
    }
    void yourPhone(){
        System.out.println(tel+"입니다.");
    }
    void yourComp(){
        System.out.println(comp+"에 근무중입니다.");
    }
    void info(){    //캡슐화(묶는다)
        super.callByName();
        this.yourPhone();
        yourComp();
    }
}
 
public class Ex03 {
    public static void main(String[] args) {
        //캡슐화
        BMan man1= new BMan("홍길동","010-1111-2222","한빛");
        man1.callByName();
        man1.yourPhone();
        man1.yourComp();
        System.out.println("-----------------------");
        BMan man2= new BMan("홍길자","010-3333-4444","한빛ENI","제니퍼홍");
//        man2.info();
        man2.callByName();
        System.out.println("-----------------------");
        Sol sol = new Sol("유승준","이병");
        sol.callbySol();
        System.out.println("-----------------------");
        
 
        //다형성
        Man man = new Man("홍길동");
        man.callByName();
        man = new Sol("가일","병장");    //다운 캐스팅
        man.callByName();
//        man.callbySol();        //오류,받는것이 Man이라
        man = new BMan("홍길자","010-3333-4444","한빛ENI","제니퍼홍");
        man.callByName();    //제니퍼홍 출력
        Object obj = new Man("홍홍ㅎ오");    //업 캐스팅
        obj = new Sol("가일","상병");
        Sol me = (Sol)obj;
        me.callbySol();
    }
}
cs

결과

*처음 이름에 null이 나오는 이유는 오버라이딩 때문이다.


은행소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class BankDB{
    int money;
    BankDB(int money){
        this.money = money;
    }
    //입금
    void input(int money){
        this.money+=money;
    }
    //출금
    int output(int money){
        if(this.money>=money){
            this.money-=money;
            return money;
        }else{
            return 0;
        }
    }
}
 
class Bank extends BankDB{
    Bank(int money){
        super(money);    
    }
    void saveMoney(int money){
        input(money);
        System.out.println("현재잔고: "+super.money);
    }
    void getMoney(int money){
        int won = output(money);
        if(won==0){
            System.out.println("출금 실패");
        }else{
            System.out.println("현재잔고: "+super.money);
        }
    }
}
public class Ex04 {
    public static void main(String[] args) {
        Bank bank = new Bank(1000);
        bank.saveMoney(10000);
        bank.getMoney(5000);
        bank.getMoney(5000);
        bank.getMoney(1000);
    }
}
cs

결과


'* Programming > JAVA' 카테고리의 다른 글

DAY18 예외처리  (0) 2016.08.01
DAY17 추상클래스&인터페이스  (0) 2016.07.26
DAY16 상속1  (0) 2016.07.26
DAY16 접근제한자  (0) 2016.07.26
회원가입 프로그램  (0) 2016.07.25

+ Recent posts