:::: 개발 ::::/::: JAVA :::

객체지향 자바기초 (인터페이스,추상화)

nayha 2018. 7. 26. 00:24
반응형

추상 클래스(abstract class)

일반 클래스와 인스턴스를 생성할 수 없다

사용하려면 서브 클래스에서 추상 클래스를 상속받은 후 서브 클래스의 인스턴스를 생성해야 한다.


CODE


abstract class Car4 {

String color;

int speed =0;

void upSpeed(int value){

speed = speed + value;

}


}


class Sedan4 extends Car4 {}


class Truck4 extends Car4 {}


public class car_sub4 {

public static void main(String[] args) {

// 추상 클래스 Car4 인스턴스 만들 수 없다.

//Car4 car4 = new Car4();

Sedan4 s4 = new Sedan4();

System.out.println("승용차 인스턴스 생성");

Truck4 t4 = new Truck4();

System.out.println("트릭 인스턴스 생성");

}


}



추상 클래스로 만든 Car4 는 더 이상 인스턴스를 직접 생성할 수 없다.

현실에서도 자동차 라는 추상적 개념 보다 승용차/트럭 


추상 메소드

목적은 상속 받은 서브 클래스에서 오버라이딩 


즉 껍데기(형태)만 만들어두고 

서브 클래스에서 기능 채우는 방식

ex)

abstract class 자동차{ //추상 클래스

abstract 동작한다() // 추상 메소드

}


class 승용차 extends 자동차{

동작한다() {// 오버라이딩

/*사람을 태우는 동장*/

}

}


class 트럭 extends 자동차{

동작한다() {// 오버라이딩

/*짐을 싣는 동작*/

}

}


실제 코드


abstract class Car5 {

String color;

int speed =0;

abstract void work()

//추상 메소드가 1개라도 있으면 

//해당 클래스는 무조건 추상 클래스

}


class Sedan5 extends Car5 {

void work(){

System.out.println("승용차 사람을 태움");

}

}


class Truck5 extends Car5 {

void work(){

System.out.println("짐을 싣고 있음");

}

}




public class car_sub5 {

public static void main(String[] args) {

Sedan5 s5= new Sedan5();

s5.work(); //오버라이딩 메소드

Truck5 t5 = new Truck5();

t5.work(); //오버라이딩 메소드

}


}



인터페이스

추상클래스와 거의 비슷하며 다중 상속(여러개 클래스 상속)을 위해 사용되기도 한다.

인스턴스를 직접생성할 수 없다.

필드,추상메소드 가질 수 있지만

추상 클래스와 달리 일반메소드,생성자를 가질 수 없다.

또한 필드도 static final 을 붙인 상수화한 필드만 사용할 수 있으면 반드시 초기화해야 한다.


Code


interface Car6 {

static final int CAR_COUNT =0; //필드 변수는 반드시 초기화 static final 

abstract void work();

}


class Sedan6 implements Car6{

public void work() { //인터페이스의 추상 메소드 완성 할때는 public 키워드 붙인다

System.out.println("세단이가 사람을 태우고 있습니다.");

}

}


class Truk6 implements Car6{

public void work(){

System.out.println("트럭이가 짐을 싣고 있습니다");

}

}



public class car_sub5 {

public static void main(String[] args) {

Sedan6 s6= new Sedan6();

s6.work();

Truk6 t6 = new Truk6();

t6.work();

}


}


인터페이스 다중 상속 Code


interface Car7 {

void work();

}


interface Cannon {

void fire();

}


class Tank implements Car7, Cannon {


@Override

public void fire() {

System.out.println("땡끄가 대포를 뻥 쏩니다.");


}


@Override

public void work() {

System.out.println("땡끄가 앞으로  구구구 갑니다.");


}


}


public class car_sub7 {

public static void main(String[] args) {

Tank tank = new Tank(); // 두가지 한번에..

tank.work();

tank.fire();

}





반응형