일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DML
- Git
- MySQL
- 프론트엔드
- String클래스
- 스프링
- JavaScript
- 입출력
- 자바
- 데이터 조회
- 클래스
- 메서드
- github
- 형변환
- 자바스크립트
- html
- 정보처리기사필기요약
- 백준
- 개발자
- SQL
- BufferedReader
- mybatis
- 예외처리
- where
- 웹개발
- select
- scanner
- StringBuilder
- Linux
- select문
- 리눅스
- sql문
- 프로그래머스 sql 고득점 kit
- 프로그래밍
- order by
- 프로그래머스 SQL
- 백엔드
- 정보처리기사
- Java
- 알고리즘
- Today
- Total
ToBe끝판왕
[ JAVA ] 추상클래스 본문
추상클래스
• 추상은 실체간에 공통되는 특성을 추출한 것
• 자바( Java )에서도 객체를 직접 생성할 수 있는 클래스를 실체 클래스라 하는데 이 클래스들의 공통적인 특성을
추출해서 선언한 클래스를 추상클래스라고 한다.
▶ 추상클래스의 용도
1) 공통된 필드 / 메서드의 이름 통일
• 클래스를 여러명이 설계하면 클래스마다 필드 / 메서드가 제각기 다른 이름을 가질 수 있다.
• 클래서 공통적으로 사용하는 필드 / 메서드는 추상클래스에서 정의해서 같은 이름을 사용하게 만든다.
2) 클래스 작성할때 시간 절약
• 공통적인 필드와 메서드는 추상 클래스에 모두 선언해두고, 다른 점만 클래스에 선언하면 클래스를
작성하는 시간을 절약할 수 있다.
▶ 추상클래스의 선언
• 클래스 선언에 abstract 키워드를 붙여야 한다.
• 이 키워드를 붙이면 new 연산자를 이용해서 객체를 만들지 못하고, 상속을 통해 자식클래스만 만들 수 있다.
• 추상클래스의 선언
public abstract class 클래스이름 {
// 필드
// 생성자
// 메서드
}
• 예시
· 추상클래스( 부모 클래스 )
public abstract class Phone {
// 필드
public String owner;
// 생성자
public Phone( String owner ) {
this.owner = owner;
}
// 메서드
public void turnOn() {
System.out.println( "폰 전원을 켭니다." );
}
public void turnOff() {
System.out.println( "폰 전원을 끕니다." );
}
}
· 자식클래스
public class SmartPhone extends Phone {
// 필드
// 생성자
public SmartPhone( String owner ) {
super( owner );
}
// 메서드
public void internetSearch() {
System.out.println( "인터넷 검색을 합니다." );
}
}
· 실행클래스
public class PhoneExample {
public static void main( String[] args ) {
// Phone phone = new Phone(); // 추상클래스는 new연산자로 객체 만들 수 X
SmartPhone smartPhone = new SmartPhone( "홍길동" );
smartPhone.turnOn();
smartPhone.internetSearch();
smartPhone.turnOff();
}
}
▶ 추상 메서드 & 재정의
• 클래스에서 메서드를 정의하는데 공통된 이름을 가지고 있지만, 메서드 내용이 다른 경우도 있다.
특성은 같아서 메서드이름은 같지만 안의 기능이 다를 경우 추상메서드를 사용해야 한다.
• 추상클래스는 추상메서드를 선언할수 있다.
( 일반적인 메서드처럼 { } 중괄호가 없다. )
· 추상 메서드 선언
[ public | protected ] abstract 리턴타입 메서드이름( 매개변수, ... );
• 예시
- 추상 클래스 설계 시, 하위 클래스가 반드시 실행 내용을 채우도록 강제하고 싶은 메서드 있을 경우
해당 메서드를 추상 메서드로 선언
- 자식 클래스는 반드시 추상메서드를 재정의해서 실행 내용을 작성해야 하는데, 만일 작성하지 않으면 컴파일 에러 발생
• 추상 클래스
public abstract class Animal {
public String kind;
public void breathe() {
System.out.println( "숨을 쉽니다." );
}
public abstract void sound(); // 추상 메서드
}
• 자식 클래스1 ( 추상 메서드 재정의 )
public class Dog extends Animal {
public Dog() {
this.kind = "포유류";
}
@Override
public void sound() {
System.out.println( "멍멍" );
}
}
• 실행 클래스
※ 3가지 방법으로 재정의된 추상 메서드 사용
1) 단순히 자식 클래스들의 객체 만들어서 메서드 사용
2) 자식 클래스 객체를 부모 타입으로 자동 타입 변환 후, 메서드 호출
3) 부모타입 변수를 매개변수로 갖는 새로운 메서드 만들고 , 메서드 호출 시
매개변수로 자식 객체를 넣어주면 자동 타입 변환되어 animal.sound() 실행
public class AnimalExample {
public static void animalSound( Animal animal ) {
animal.sound();
}
public static vid main( String[] args ) {
Dog dog = new Dog();
Cat cat = new Cat();
dog.sound();
cat.sound();
System.out.println( "------------" );
// 변수의 자동 타입 변환
Animal animal = null;
animal = new Dog();
animal.sound();
animal = new Cat();
animal.sound();
System.out.println( "------------" );
// 메서드의 다형성 이용
animal.sound( new Dog() );
animal.sound( new Cat() );
}
}
'■ 프로그래밍 SKILLS > JAVA' 카테고리의 다른 글
[ JAVA ] java.lang 패키지( Object 클래스 , String 클래스 ) (0) | 2022.05.25 |
---|---|
[ JAVA ] 인터페이스( Interface ) (0) | 2022.05.24 |
[ JAVA ] 타입변환과 다형성 (0) | 2022.05.23 |
[ JAVA ] 상속 (0) | 2022.05.23 |
[ JAVA ] 인스턴스 멤버 , 정적 멤버 , 싱글톤 , final필드 , 패키지 , 접근제한자 , Getter & Setter 메서드 (0) | 2022.05.19 |