다잇소


[IT/트랜드] Java 기초 – ⑦ ( Abstract, Interface)

2017.09.14
 


  1.  Abstract class(추상클래스)


1.         abstract keyword


– class와 method 앞에서 붙을 수 있음


– subclass에서 구현이 되지만, 정보의 제공이 필요할 때 사용


다형성 지원


– abstract class와 abstract method가 있음


 


2.         abstract method


abstract keyword는 반환 type 앞에 위치 하여야 함


– code가 들어 있는 body가 없음 : 실제로 구현을 하지 않고, 상속을 받은 subclass에서 구현


– 종료는 세미콜론(;)로 표시










modifier abstract type methedName();


) public abstract double computePay();



 


3.         abstract class


abstract keyword는 class keyword 앞에 위치 하여야 함


– abstract method는 있을 수도 있고, 없을 수도 있음


– abstract class는 초기화 될 수 없으나, 생성자는 가질 수 있음


– abstract method를 가지고 있는 모든 class는 반드시 abstract class가 되어야 함


– subclass에서 구현해야 되지만, subclass에서 구현하지 않은 경우, 그 해당 subclass 다시 abstract class가 됨


예제 11 -1










package com.kds.java.basic.char03;


 


public abstract class Animal {


protected double size;


protected double weight;


public Animal(double size,double weight) {


this.size = size;


this.weight = weight;


}


 


public double getSize() {


return size;


}


public double getWeight() {


return weight;


}


 


protected abstract void move();


protected abstract void eat();


}



 


예제 11 -2










package com.kds.java.basic.char03;


 


public abstract class Canine extends Animal {


protected double speed;


public Canine(double size, double weight, double speed) {


super(size, weight);


setSpeed(speed);


}


 


@Override


public void eat() {


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


}


public double getSpeed() {


return speed;


}


 


public void setSpeed(double speed) {


if( speed > 40 ) {


this.speed = 40;


}


else {


this.speed = speed;


}


}


 


public void run() {


if( weight > 100) {


System.out.println(“A canine is too heavy to run.”);


}


else {


System.out.printf(“A canine runs at %fkm/h.\n”, speed);


}


}


}



예제 11 -3










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 move() {


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


}


public void bark() {


if( weight > 20 ) {


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


}


else {


move();


System.out.println(멍멍);


}


}


}



예제 11 -4


* 틀린 부분을 찾으세요.(생성자 사용법)










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();


dog.move();


}


}



 


※ Quiz


1. 다음에서 class 선언이 올바르지 않은 것을 찾으세요.










class A {}


 


abstract class B extends A {


public abstract void methodAbstract01();


protected abstract void methodAbstract02();


}


 


abstract class C extends B {


public void methodAbstract01(){


System.out.println(“methodAbstract01 in C.”);


}


public void methodAbstract02(){


System.out.println(“methodAbstract02 in C.”);


}


private abstract void methodAbstract03();


}


 


abstract class D extends A {


public void method01(){


System.out.println(“method01 in D.”);


}


}


 


class E extends D {


}



 




  1.  Interface


– interface라는 keyword를 class 대신에 사용


– 모든 method가 abstract 이어야 함


다형성 지원


– abstract keyword는 method 앞에서 생략 할 수 있음


– 초기화 될 수 없고, 생성자를 가질 수도 없음


– Instance variable을 가질 수 없음. 그렇지만, static final variable는 가질 수 있음.


– Interface인 경우는 class에서 구현이 되고, implements keyword를 사용


class는 여러 개의 interface를 구현 할 수 있음


예제 12 – 1










package com.kds.java.basic.char03;


 


interface Flyable{


public void fly();


}


 


interface Swimmable {


public void swim();


}


 


 


class FlyDog extends Dog implements Flyable {


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


super(size, weight, speed,breed);


}


public void fly() {


System.out.println(“A FlyDog can fly.”);


}


}


 


class SwimDog extends Dog implements Swimmable {


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


super(size, weight, speed,breed);


}


public void swim() {


System.out.println(“A FlyDog can swim.”);


}


}


 


class FlySwimDog extends Dog implements Flyable, Swimmable {


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


super(size, weight, speed,breed);


}


public void fly() {


System.out.println(“A FlySwimDog can fly.”);


}


public void swim() {


System.out.println(“A FlySwimDog can swim.”);


}


}



예제 12 – 2










package com.kds.java.basic.char03;


 


public class DogDrive {


public static void main(String[] args) {


Flyable flyDog = new FlyDog(8.0, 5.0, 35.0, 치와와);


Swimmable swimDog = new SwimDog(8.0, 5.0, 35.0, 치와와);


flyDog.fly();


swimDog.swim();


Flyable flyDog2 = new FlySwimDog(8.0, 5.0, 35.0, 치와와);


flyDog2.fly();


Swimmable swimDog2 = (Swimmable)flyDog2;


swimDog2.swim();


FlySwimDog flySwimDog = (FlySwimDog)flyDog2;


flySwimDog.fly();


flySwimDog.swim();


}


}



 


– interface끼리 상속하는 경우 extends keyword를 사용


– implements한 class가 실제 구현을 하지 않는 경우, 그 class는 abstract class가 되어야 함


예제 12 – 3










interface Divable extends Swimmable {


public void dive();


}


 


class DivableDog extends Dog implements Divable {


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


super(size, weight, speed,breed);


}


public void swim() {


System.out.println(“A DivableDog can swim.”);


}


public void dive() {


System.out.println(“A DivableDog can dive.”);


}


}


 


abstract class DivableOnlyDog extends Dog implements Divable {


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


super(size, weight, speed,breed);


}


public void dive() {


System.out.println(“A DivableOnlyDog can dive.”);


}


}



예제 12 – 4










package com.kds.java.basic.char03;


 


public class DogDrive {


public static void main(String[] args) {


Swimmable swimDog = new DivableDog(8.0, 5.0, 35.0, 치와와);


Divable divable = new DivableDog(8.0, 5.0, 35.0, 다이빙 치와와);


swimDog = divable;


swimDog.swim();


divable.swim();


divable.dive();


}


}



※ Quiz


1. 다음 주어진 조건에 부합하는 것을 고르시오.


– A ,E : class


– B, D : interface


– C : abstract class










a. class F implements B,C{ }


b. class F implements B{ }


c. class F extends A,E{ }


d. class F extends E{ }


e. class F implements B,D{ }



 


2. 다음 주어진 interface구현, 확장하는 방법으로 옳은 것을 모두 고르시.










interface AA {}


interface BB {}


interface CC extends AA {}



a. class DD implements AA { }


b. class EE implements AA,BB { }


c. interface FF extends AA { }


d. interface GG extends AA,BB { }


e. class HH implements CC { }


f. abstract class II implements CC { }


 




 




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

카테고리 레이어 닫기