다잇소


[IT/트랜드] Java 기초 – ⑥ ( Inheritance)

2017.09.08
 


 10. Inheritance(상속)




2) Override와 Overload


– Override는 같은 식별자를 가진 method를 subclass에서 재정의 하는 것


– Overload는 같은 이름을 가진 method를 parameter로 식별하는 것










package com.kds.java.basic.char03;


 


public class OverloadTest {


public static void main(String[] args) {


OverloadTest overloadTest = new OverloadTest();


int iValue = 10;


overloadTest.overloadedMethod(iValue);


}


void overloadedMethod(double d) {


System.out.println(“The Method overloadedMethod with parameter double is executed.”);


}


 


void overloadedMethod(int i) {


System.out.println(“The Method overloadedMethod with parameter int i is executed.”);


}


 


void overloadedMethod(float f) {


System.out.println(“The Method overloadedMethod with parameter float is executed.”);


}


}



 


3) Overriding 제약 사항


– 접근자는 superclass의 접근자보다 범위가 같거나 넓어야 함.


– 생성자는 overridden 될 수 없음


Child class에서 올바르지 않은 Overriding을 찾아 보세요.










class Parent {


public Parent(){}


private void privateMethod() {}


void defaultMethod() {}


protected void protectedMethod() {}


public void publicMethod() {}


}


 


class Child extends Parent {


public Parent(){}


@Override


protected void privateMethod() {}


@Override


private void defaultMethod() {}


@Override


public void protectedMethod() {}


@Override


protected void publicMethod() {}


}



– Exception은 overriding method에서 처리하지 않거나, 동일 exception이나 하위 type의 exception으로 처리가능하나, superclass type의 exception으로는 처리 못함


– final keyword 붙은 method는 overridden 될 수 없음










class Animal {


public void eat() throws IOException {}


public void move() throws FileNotFoundException {}


public void breathe() throws FileNotFoundException {}


public final void finalMethod(){}


}


 


class Dog extends Animal {


@Override


public void eat() throws FileNotFoundException {}


@Override


public void move() throws IOException {}


@Override


public void breathe(){}


@Override


public final void finalMethod(){}


}



 


4.         final keyword


– class, method, variable 앞에 모두 붙을 수 있음


– 더 이상 변경이 불가능하다는 의미


1 ) Variable앞에 final


– 초기화 이후에 새롭게 값을 할당 할 수 없음


– Parameter 앞에도 final 사용이 가능함


– static함께 사용하여 상수를 선언 할 때 사용, 변수명은 대문자로 하고 구분은 _로 하는 권고사항










class Car {


final int speedlimit = 90;


final static int SPEED_LIMIT= 400;


void run() {


speedlimit = 400;


}


void finalRun(final int speed) {


speed = 400;


}


}



 


2 ) Method앞에 final


– Overridden 될 수 없음


– 하위 type에서 변경을 원하지 않을 경우


– 생성자 앞에는 붙을 수 없음 : 생성자는 상속이 되지 않음


 


3) class 앞에 final


– 더 이상 상속이 되지 않음


– 대표적인 class : String, Integer, Double, etc










public final class String implements java.io.Serializable, Comparable, CharSequence {


}


 


// 아래와 같이 상속 없음


class StringUtil extends String {}



 


5.         Polymorphism(다형성)


– 하나의 type이 여러 개의 type를 할당 받을 수 있는 능력


IS-A 관계임


– Overloading도 다형성으로 인정


– Overridden된 method는 run-time 시에 Object의 instance화 된 실제 Object의 의해서 결정(Virtual Method Table)


Runtime 시에 type check를 할 때는 instanceof 라는 keyword 사용










package com.kds.java.basic.char03;


 


public class Dog extends Canine {


private String breed;


public Dog(double size, double weight, double speed, String breed) {


super(size, weight, speed);


this.breed = breed;


}


 


public String getBreed() {


return breed;


}


 


public void setBreed(String breed) {


this.breed = breed;


}


@Override


public void eat() {


System.out.println(“A dog eats.”);


}


public void bark() {


if( weight > 20 ) {


System.out.println(으르렁 으르렁);


}


else {


System.out.println(멍멍);


}


}


}



 










package com.kds.java.basic.char03;


 


public class DogDrive {


public static void main(String[] args) {


Animal animal = new Animal(10.0, 3.0);


Animal canine = new Canine(8.0, 5.0, 35.0);


Animal dog = new Dog(8.0, 5.0, 35.0,치와와);


animal.eat();


canine.eat();


dog.eat();


if( animal instanceof Animal ) {


System.out.println(“animal is an Animal.”);


}


if( canine instanceof Canine ) {


System.out.println(“canine is an Canine.”);


}


if( dog instanceof Dog ) {


System.out.println(“dog is an Dog.”);


}


if( dog instanceof Animal ) {


System.out.println(“dog is an Animal.”);


}


}


}



– subclass가 superclass에 할당 된 경우, subclass에만 있는 instance variable이나 method  사용 불가.


– superclass는 subclass에 할당 할 수 없음


– superclass에 할당 된 subclass는 casting(괄호를 사용)연산으로 본래의 type에 할당이 가능










VariableType variableName = (VariableType)existVariable;



 










package com.kds.java.basic.char03;


 


public class DogDrive {


public static void main(String[] args) {


double d = 20.5;


int i = d;


i = (int) d;


Animal canine = new Canine(8.0, 5.0, 35.0);


Animal dog = new Dog(8.0, 5.0, 35.0,치와와);


canine.run();


dog.bark();


Canine canine2 = (Canine)canine;


Dog dog2 = (Dog)dog;


canine2.run();


dog2.bark();


}


}



 


※ Quiz


1. 다음을 compile 해 보고, complie이 되면 실행하여 보세요.










package com.kds.java.basic.char03;


 


public class FinalTest {


public static void main(String[] args) {


final Car car = new Car();


car.speed = 200;


System.out.println( car.speed );


}


}


 


class Car {


double speed = 100.0;


}



2. Polymorphism에 관한 참, 거짓을 선택하세요.










1. Overloading과 overriding중 overriding만 다형성에 해당된다.


2. Superclass 변수가 subclass의 객체를 참조 할 수 있다는 것이 Java에서 다형성의 예이다.


3. 다음 private와 final의 접근자를 가진 method만이 overriding 될 수 없다.


4. Overridden method는 실제 실행 시에 실행 할 method가 결정이 된다.


5.참조하는 변수의 type이 실행 될 method를 결정한다.



 




 




설정된 프로필 사진이 없습니다.
| Wise리더
관심분야 IT,여행,맛집

카테고리 레이어 닫기