추상 클래스(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();
}
':::: 개발 :::: > ::: JAVA :::' 카테고리의 다른 글
java indexOf 는 mysql instr (0) | 2018.12.06 |
---|---|
JAVA LIST 변환 & 추가 (0) | 2018.11.08 |
간단한 람다 Lambda 테스트 Code (0) | 2018.08.28 |
스프링 부트 구름IDE 이용 원격 개발 시작 (0) | 2018.08.13 |
객체지향 자바기초 (클래스 상속) (0) | 2018.07.19 |
객체지향 자바기초 (클래스 변수,인스턴스 변수) (0) | 2018.07.18 |
객체지향 자바기초 (클래스,접근제어) (0) | 2018.07.17 |
JAVA 외부 URL 호출 JSON 형태 가져오기 (2) | 2017.05.13 |