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 |