본문 바로가기
비트 단기/java

다형성 이어서 추상클래스

by woohyun22 2018. 12. 6.
package Pack01;
import java.util.LinkedList;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
abstract class Apple{
abstract void func01();//함수원형, 함수 프로토타입
//모든 함수는 추상함수가 존재하면 반드시 그 클래스 앞에 abstract를 붙여줘야 된다.
//추상 클래스는 코드가 미완성이라 객체 생성 불가
//자체적으로는 쓸 수 없고 무조건 상속을 받아서 써야되는 강요클래스이다.
//추상함수를 상속받은 자식 클래스는 무조건 추상함수를 완성시켜줘야된다.
void func02() {
System.out.println("함수2번콜");
}
}
class Orange extends Apple{//{} ()
void func01() {
System.out.println("함수1번콜");
}
void func03() {
System.out.println("함수3번콜");
}
}
class Kiwi extends Apple{
void func01() {
//함수1번을 구현해주면 추상함수를 상속받은 Kiwi클래스의 오류가 사라진다.
}
void func04() {
System.out.println("함수4번콜");
}
}
public class Hello {
public static void main(String[] args) {
Orange o1 = new Orange();
o1.func01();
o1.func02();
o1.func03();
Kiwi k1 = new Kiwi();
k1.func04();
}
}
//abstract핸드폰 클래스 밧데리 함수
//상속받은함수는 밧데리 함수를 완성시켜라
//받은애가 책임지고 밧데리를 만들어야된다.



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
package Pack01;
import java.util.LinkedList;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
abstract class Apple{
    abstract void func01();
    void func02() {
        System.out.println("함수2");
    }
}
class Orange extends Apple{
    void func01() {
        //얘를 만들어줘야 추상클래스를 상속받은 orange클래스의 오류가 풀린다!
        System.out.println("함수1");
    }
    void func03() {
        System.out.println("함수3");
    }
}
public class Hello {
    public static void main(String[] args) {
        
        //1번째 추상클래스 상속을 직접 만들어서 쓴다.
        Orange o1 = new Orange();
        o1.func01();
        o1.func02();
        o1.func03();
        
        
        //업캐스팅 가능 - 애플타입으로는 객체생성이 불가하다. /다형성프로그램을 만들 수 있다.
        //2번째 다형성 사용 
        Apple a1 = new Orange();
        //문법 = 메모리(가지고있지만 사용은 할 수 없다.)  
        a1.func01();
        a1.func02();
 
        //집중
        //Apple a2 = new Apple();//추상함수를 들고있는 추상클래스라서 객체생성불가.
        
        
        //3번째 익명 클래스
        Apple a2 = new Apple() {
            void func01() {
                //익명클래스를 만들었다.
                //클래스를 위에 만들지않았다는것 
                System.out.println("1번");
            }
            void func03() {
                System.out.println("3번");
            }
        };
 
        a2.func01();
        //a2.func03();//필드 내부에서는 사용가능하나 밖에서는 사용불가하다.
        //오버라이딩으로 애플타입으로에서 만들어진 것이니까 부모문법밖에 쓸수 없다. 익명클래스는 자식꺼라 쓸 수 없다.
            
        
        //4번째 익명 객체
        new Apple() {//애플타입으로는 new를 할 수 없어서 오류가 뜬 것이다.
            void func01() {
                //넣어주면 사용가능하다.
            }
        }.func01();//익명 객체
        //객체가 없으므로 한번만 쓰고 버리는 것이다.
 
 
 
    }
}
//예시
//abstract핸드폰 클래스 밧데리 함수
//상속받은함수는 밧데리 함수를 완성시켜라
//받은애가 책임지고 밧데리를 만들어야된다.
 
//가변적이다 함수의 인수 전달을 코드를 보내려는 것
//익명클래스로 인해 코드전달이 가능해졌다. 임의의 코드를
 
cs




package Pack01;
import java.util.LinkedList;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
abstract class Apple{
    abstract void func01();
}
class Dog{//코드 전달 하는것을  AOP 관점지향프로그램이라고 한다.
    void func100(Apple apple){
        System.out.println("멍멍");//코드와 코드사이에 가변적으로 활용
        apple.func01();
        System.out.println("냠냠");
    }
}
public class Hello {
    public static void main(String[] args) {
        Apple a1 = new Apple() {
            @Override
            void func01() {
                // TODO Auto-generated method stub
                System.out.println("호랑이");
            }
            
        };
        a1.func01();
        Apple a2 = new Apple() {
            @Override
            void func01() {
                // TODO Auto-generated method stub
                System.out.println("코끼리");
            }
        };
        a2.func01();
        System.out.println();
        Dog d1 = new Dog();
        d1.func100(a1);
        d1.func100(a2);
        
    }
}
 
 
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
package Pack01;
import java.util.LinkedList;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import java.nio.channels.NetworkChannel;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
abstract class Apple{
    abstract void func01();
}
class Dog{//코드 전달 하는것을  AOP 관점지향프로그램이라고 한다.
    void func100(Apple apple){
        System.out.println("멍멍");//코드와 코드사이에 가변적으로 활용
        apple.func01();
        System.out.println("냠냠");
    }
}
public class Hello {
    int a=0;
    String b = "독수리";
    String c = new String("달팽이");
    Apple d = new Apple() {
        void func01() {
            //이 형식으로 쓸 수 있다.
            //익명클래스 생성으로 객체생성한 방법이다.
        }
    };
    public static void main(String[] args) {
        Apple a1 = new Apple() {
            @Override
            void func01() {
                // TODO Auto-generated method stub
                System.out.println("호랑이");
            }
        };
        a1.func01();
        Apple a2 = new Apple() {
            @Override
            void func01() {
                // TODO Auto-generated method stub
                System.out.println("코끼리");
            }
        };
        a2.func01();
        System.out.println();
        Dog d1 = new Dog();
        d1.func100(a1);
        d1.func100(a2);
        
        d1.func100(new Apple() {//인수로 객체를 바로 던지는데 오버라이드
            @Override
            void func01() {
                // TODO Auto-generated method stub
                System.out.println("앵무새");
            }
        });
    }
}
 
 
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
88
89
90
91
92
93
package Pack01;
import java.util.LinkedList;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import java.nio.channels.NetworkChannel;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
 
interface Apple{//추상함수밖에 없을때는 추상클래스라고 하지않고 인터페이스라고 한다.
    //인터페이스를 누르면 스킬 발동
    //abstract void func01();
    void func01();//생략할 수 있다. 추상함수밖에 없다고 생각 //코드 구현이 없을때를 강조
    /*void func02() {
        
    }*/
    void func03();
    
}
class Orange implements Apple {//interface일때는 implements(구현) 코드를 구현하세요~
    public void func01() {
        System.out.println("호랑이");
    };
    public void func03() {
        System.out.println("코끼리");
    };
}
class Kiwi{
    void show(Apple apple) {
        apple.func01();
    }
}
public class Hello {
    
    public static void main(String[] args) {
        Orange o1 = new Orange();
        o1.func01();
        o1.func03();
        
        Apple a1 = new Orange();
        a1.func01();
        a1.func03();
        
        System.out.println();
        
        Apple a2 = new Apple() {
            @Override
            public void func01() {
                // TODO Auto-generated method stub
                System.out.println("앵무새");
            }
            @Override
            public void func03() {
                // TODO Auto-generated method stub
                System.out.println("고양이");
            }
        };
        a2.func01();
        a2.func03();
        
        System.out.println();
        
        new Apple() {
            @Override
            public void func01() {
                // TODO Auto-generated method stub
                System.out.println("강아지");
            }
            @Override
            public void func03() {
                // TODO Auto-generated method stub
                System.out.println("사자");
            }
        }.func01();
        Kiwi k1 = new Kiwi();
        k1.show(a1);
        k1.show(a2);
        k1.show(new Apple(){//Apple의 추상함수를 둘다 완성시켜줘야된다.
            @Override
            public void func01() {
                // TODO Auto-generated method stub
                System.out.println("고양이");
            }
            @Override
            public void func03() {
                // TODO Auto-generated method stub
                System.out.println("고양이1");
            }
        });
    }
}
 
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package Pack01;
import java.util.LinkedList;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import java.nio.channels.NetworkChannel;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
class Apple{
    
}
public class Hello {
    
    public static void main(String[] args) {
        //Scanner s = new Scanner(System.in);//숫자입력받는 방법
        System.out.println("숫자를 입력하세요");
        int n = new Scanner(System.in).nextInt();//블로킹상황 멈춰있는 
        //하나 해놓고 변수로 쓴다.
        System.out.println(n);
    }
}
 
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
package Pack01;
import java.util.LinkedList;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import java.nio.channels.NetworkChannel;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
public class Hello {
    
    public static void main(String[] args) {
        Random rn = new Random();
        System.out.println(rn.nextInt());//+-20억
        System.out.println(rn.nextInt(100));//0~100까지
        
        
        for (int i = 0; i < 10; i++) {
            int n = rn.nextInt(3);
            System.out.print(n+" ");
        }
    }
}
 
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
package Pack01;
import java.util.LinkedList;
import java.util.Random;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
import java.nio.channels.NetworkChannel;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
public class Hello {
    
    public static void main(String[] args) {
        Random rn = new Random();
        int n= rn.nextInt(6)+1;
        System.out.println("숫자를입력하세요");
        int input = new Scanner(System.in).nextInt();
        if(n==input) {
            System.out.println("숫자를 맞추었습니다.");
        }else {
            System.out.println(n+" "+input);
        }
        
    }
}
 
cs


728x90

'비트 단기 > java' 카테고리의 다른 글

자바 비트연산  (0) 2018.12.07
java 다형성  (0) 2018.12.05
java LInkedList 후~  (0) 2018.12.04
java 41번  (0) 2018.12.03
24~ 31  (0) 2018.11.29

댓글