본문 바로가기
비트 장기/JAVA

7/19 배움(상속, overriding, 다형성 )

by woohyun22 2018. 7. 19.


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
/*---------------------------------------------*/
// 생성자가 없으면 컴파일러가 직접 생성자를 만든다.
// 생성자가 없어도 함수 1번이 콜 된다.
// 디폴트 생성자
// 생성자는 무조건 하나 만드는 것이 좋다. 
package PACK01;
import java.util.Random;
import java.util.Scanner;
class Tiger{
    int a, b, c;
// 생성자 삭제
    void func01() {
        System.out.println("함수 1번 콜");
    }        
}
public class Hello {
    public static void main(String[] args) {
        Tiger a = new Tiger();
        a.func01();
    }
}
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
package PACK01;
import java.util.Random;
 
import java.util.Scanner;
class Tiger{
    int a, b, c;
    Tiger(){
    } // 인수 없음
    Tiger(int num){
 
        
 
    } // 인수 전달
 
    
 
    void func01() {
 
        System.out.println("함수 1번 콜");
 
    }
 
    
 
}
 
 
 
public class Hello {
    public static void main(String[] args) {
        Tiger t1 = new Tiger(); // 인수 없음
 
        Tiger t2 = new Tiger(50); // 인수 필요 
        t1.func01();
    }
 
}
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
package PACK01;
 
 
 
import java.util.Random;
 
import java.util.Scanner;
 
 
 
class Tiger{
 
    int a, b, c;
 
    Tiger(){
 
        
 
    } // 인수 없음
 
    
 
    Tiger(int num){
 
        
 
    } // 인수 전달
 
    
 
    void func01() {
 
        System.out.println("함수 1번 콜");
 
    }
 
    
 
}
 
 
 
public class Hello {
 
 
 
    public static void main(String[] args) {
 
 
 
        Tiger t1 = new Tiger(); // 인수 없음
 
        Tiger t2 = new Tiger(50); // 인수 필요
 
        
 
        t1.func01();
 
 
 
    }
 
}
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
package pack01;//https://colorscripter.com/
class Animal{
    int a,b,c;
    Animal(){//부모//super은 반드시 첫줄에 나와야한다.
        super();
        System.out.println("부모 생성자콜");
    }
    Animal(int a){
        System.out.println("부모 생성자 콜"+a);
    }
    Animal(int a, int b){
        System.out.println("부모 생성자 콜"+a+" "+b);
    }
}
class Tiger extends Animal{//자식 extends 상속
    int a,b,c;
    Tiger(){
        super(100);
        System.out.println("자식 생성자 콜");
    }
    Tiger(int a){
        //super생략
        super(300,400);
        System.out.println("자식 생서자 콜"+a);
    }
}
public class Hello {
 
    public static void main(String[] args) {
        Tiger t1 = new Tiger(200);
        
    }
}
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
package pack01;
             //final 
class Animal{//final class는 상속불가
    int a,b,c;
    Animal(){
        System.out.println("Animal call");
    }
    void func01() {
        System.out.println("부모함수 1번콜");
        func02();
        func03();
    }
    void func02() {
        System.out.println("부모함수 2번콜");
    }
    void func03() {
        System.out.println("부모함수 3번콜");
    }
}
class Tiger extends Animal{
    int a,b,c;
    Tiger(){
        System.out.println("Tiger call");
    }
    void func02() {//같은 모양의 함수를 넣으면 부모의 코드가 희미해져 사용x
                   //자식 때문에 부모 함수가 가려졌다.overriding = 상속이 나와야됨
        System.out.println("자식함수 2번콜");
    }
    void func03() {
        super.func03();
        //System.out.println("자식함수 3번콜");
    }
}
public class Hello {
    public static void main(String[] args) {
        Tiger t1 = new Tiger();
        t1.func01();
    }
}

cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package pack01;
class A{//이중상속~
    
}
class B extends A{
    
}
class C extends A{
    
}
class D extends C{
    
}
class E extends D{
    
}
public class Hello {
    public static void main(String[] args) {
        
    }
}
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
85
86
87
package pack01;
class Fruit{//다형성
    void eat() {
        System.out.println("먹습니다");
    }
    void make() {
        System.out.println("과일을 만듭니다.");
    }
    void show() {
        System.out.println("사과를 보여줍니다.");
    }
    void sell() {
        System.out.println("사과를 팝니다.");
    }
}
class Apple extends Fruit{
    void eat() {
        System.out.println("사과를 먹습니다.");
    }
    void sell() {
        System.out.println("사과를 팝니다.");
    }
}
class Banana extends Fruit{
    void eat() {
        System.out.println("바나나를 먹습니다.");
    }
    void sell() {
        System.out.println("바나나를 팝니다.");
    }
}
class Orange extends Fruit{
    void eat() {
        System.out.println("오렌지를 먹습니다.");
    }
    void sell() {
        System.out.println("오렌지를 팝니다.");
    }
}
class Kiwi extends Fruit{
    void eat() {
        System.out.println("키위를 먹습니다.");
    }
    void sell() {
        System.out.println("키위를 팝니다.");
    }
}
class Store{//이 부분이 다형성을 쓰는 이유 여러번 안써도 하나로 다 받아먹을수있다.
    /*void sell(Apple a) {
        a.eat();
    }
    void sell(Banana a) {
        a.eat();
    }
    void sell(Orange a) {
        a.eat();
    }*/
    void sell(Fruit a) {
        a.sell();
    }
}
public class Hello {
    public static void main(String[] args) {
        Apple a1 = new Apple();
        Banana b1 = new Banana();
        Orange o1 = new Orange();
        Fruit f1 = new Apple();//왼쪽 부모 오른쪽 자식
        Fruit f2 = new Banana();        
        Store s1 = new Store();
        
        /*a1.eat();
        b1.eat();
        o1.eat();
        f1.eat();//a1.eat()와 결과가 같다.
        a1.make();*/
        //f1.show();//overriding 된것만 쓸수있다. or자식꺼
        
        s1.sell(a1);
        s1.sell(b1);
        s1.sell(o1);//함수를 추가할 필요가없다.
        s1.sell(new Apple());
        s1.sell(new Banana());
        s1.sell(new Orange());
        s1.sell(new Kiwi());
        
    }
}
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
package pack01;
class Animal{
    void cry() {
        System.out.println("전 소리를 못내요");
    }
}
class Dog extends Animal{
    void cry() {
        System.out.println("멍멍");
    }
}
class Cat extends Animal{
    void cry() {
        System.out.println("야옹");
    }
}
class Snake extends Animal{
    
}
class Tiger extends Animal{
    void cry() {
        System.out.println("어흥");
    }
}
class Rabbit extends Animal{
 
}
class Zoo{
    void cry(Animal a) {
        a.cry();
    }
}
public class Hello {
    public static void main(String[] args) {
        Zoo z = new Zoo();
        z.cry(new Dog());//받는놈은 부모 주는놈은 자식
        z.cry(new Cat());
        z.cry(new Snake());
        z.cry(new Tiger());
        z.cry(new Rabbit());
        
    }
}

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
package pack01;
class Tiger{
    void func01() {
        System.out.println("함수1번 call");
    }
}
 
public class Hello {
    public static void main(String[] args) {
        int[]ar = new int[3];
        ar[0=10;
        ar[1=20;
        ar[2=30;
        for (int i : ar) {//foreach문
            System.out.println(i);
        }
        Tiger t1 = new Tiger();
        Tiger[] t2 = new Tiger[3];
        t2[0]= new Tiger();//이런식으로 배열만들어줘야 쓸수있다.
        t2[1]= new Tiger();                                            
        t2[2]= new Tiger();
        t2[0].func01();
        t2[1].func01();
        t2[2].func01();
        for (int i = 0; i < t2.length; i++) {
            t2[i].func01();
        }
    }
}
cs


728x90

'비트 장기 > JAVA' 카테고리의 다른 글

7/21 배움 (추상class, )  (0) 2018.07.21
7/20 복습  (0) 2018.07.20
7/18 복습  (0) 2018.07.19
7/18 배움(함수,overloading, 생성자 class, chaining, final, static)  (0) 2018.07.18
7/17 복습(생성자 오버로딩)  (0) 2018.07.18

댓글