티스토리 뷰

JAVA

Inheritance

Better than alone 2018. 3. 16. 11:22

/////상속받은 파생 클래스가 부모 클래스의 요소를 재정의해야 할 필요가 있을 것이다. 이를테면 오우거나 진파치의 체력을 두 줄로 해주세요...같은 요구사항이 있을 경우에는 재정의를 사용한다. 영어로는 override 오버라이드라고 한다. 재정의를 할 수 있는 것은 멤버 함수에 한정되며, 이 때문에 함수 오버라이드라고도 한다.


오버로딩과 자주 혼동되는데 오버로딩과는 다른 개념이다. 오버로딩은 메소드 이름만 같고 인수 개수나 타입이 달라 서로 구별할 수 있는 서로 다른 메소드를 만드는 것을 말한다. 헷갈리지 말도록 하자. 여담으로 부모 클래스의 오버로딩된 메소드가 여러 개 있는데 그중에 일부만 재정의하면 나머지 메소드는 가려져 호출할 수 없다. 부모의 기능 중 하나만 오버라이드 해도 될 때도 다른 메소드도 전부 재정의하자. 그냥 부모의 메소드만 호출해 반환하는 코드 한줄이면 된다.



///내꺼의 grbsolution을 상속으로 쓰는게 나은지, 인스턴스화 해서 쓰는 게 나은건지 잘 판단을 못하겠음.

public class 못 써. 근데 왜인지 모름. 


1. 기본 개념

super class : 상속되는 클래스

sub class : 상속하는 클래스


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class SuperClass{
    int a=3;
    void summation(){
        a=a+10;
    }
}
 
class SubClass extends SuperClass{
 
}
 
class Amain{
    public static void main(String[] args) {
        SubClass sc = new SubClass();
        System.out.println(sc.a); // 3 출력
        sc.summation();
        System.out.println(sc.a); // 13 출력
    }
}
 
 
cs




서브클래스는 수퍼클래스의 변수와 메소드를 자유롭게 사용 가능.



2. override

수퍼클래스에 있는 변수나 메소드를 override(다른 기능으로 구현) 할 수 있어.

하지만, input과 return 형은 같아야 해.

원칙적으로 해당 메소드 위에 @override 적어줘야 한다. (그런데 안해도 에러 안나던데, 왜인지 모름)


3. super

서브클래에스에서 한 메소드를 오버라이드 했는데, 수퍼클래스에 있는 메소드가 필요할 경우, super 이용

super.변수명

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
class Arithmetic {
    int add(int a, int b) {
        return a+b;
    }
}
class Adder extends Arithmetic {
    
}
 
//for overriding
class Sports{
    String getName(){
        return "Generic Sports";
    }
  
    void getNumberOfTeamMembers(){
        System.out.println"Each team has n players in " + getName() );
    }
}
 
class Soccer extends Sports{
    @Override
    String getName(){
        return "Soccer Class";
    }
    
    @Override
    void getNumberOfTeamMembers() {
        System.out.println"Each team has 11 players in " + getName() );
    }
}
 
public class Inheritance {
    public static void main(String []args){
        // Create a new Adder object
        Adder a = new Adder();
        
        // Print the name of the superclass on a new line
        System.out.println("My superclass is: " + a.getClass().getSuperclass().getName());    
        
        // Print the result of 3 calls to Adder's `add(int,int)` method as 3 space-separated integers:
        System.out.print(a.add(10,32+ " " + a.add(10,3+ " " + a.add(10,10+ "\n");
        
        
        
        
        
        //For overriding 
        Sports c1 = new Sports();
        Soccer c2 = new Soccer();
        System.out.println(c1.getName());
        c1.getNumberOfTeamMembers();
        System.out.println(c2.getName());
        c2.getNumberOfTeamMembers();
     }
}
 
cs


반응형

'JAVA' 카테고리의 다른 글

static 변수와 static 메소드  (0) 2018.04.05
openCSV  (0) 2018.04.02
lombok 롬복 이클립스에 설치  (0) 2018.03.29
궁금 궁금 (class variable 초기화)  (0) 2018.03.29
JVML - Java Virtual Machine Language  (0) 2018.03.20
댓글