티스토리 뷰
/////상속받은 파생 클래스가 부모 클래스의 요소를 재정의해야 할 필요가 있을 것이다. 이를테면 오우거나 진파치의 체력을 두 줄로 해주세요...같은 요구사항이 있을 경우에는 재정의를 사용한다. 영어로는 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 |
- Total
- Today
- Yesterday
- minor GC
- 메모리제한
- 엑셀
- 스도쿠
- dynamic programming
- type명령어
- 인쇄열고정
- greedy
- Excel
- SecurityContextRepository
- 이클립스메모리분석툴
- anaconda2
- graph traversals
- 인쇄행고정
- ipynb
- 여러 파일 하나로 합치기
- DP
- anaconda설치
- Divide&Conquer
- backtracking
- Markdown Note
- nbconvert
- unreachable object
- Bruteforce
- ICPC
- 동시설치
- Open ID Connect
- Python
- SecurityContextPersistenceFilter
- Note App
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |