(JAVA)자바 객체지향 언어 개념 중요 부분 총정리 part4
1. 참조변수의 형변환
1) 자손과 조상 사이에서만 형변환이 가능하다.
2) 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다.
예1)
public class Chap16 {
public static void main(String[] args) {
class Phone{}
class SmartPhone extends Phone{}
class CellPhone extends Phone{}
SmartPhone s = new SmartPhone();
CellPhone c = new CellPhone();
Phone p = new Phone();
//조상인 Phone타입으로 형변환. 괄호 생략가능
Phone p1 = (Phone)s;
//조상인 Phone타입으로 형변환. 괄호 생략가능
Phone p2 = (Phone)c;
//자손인 SmartPhone으로 형변환, 괄호 생략 불가능
SmartPhone s1 = (SmartPhone) p;
}
}
예2)
public class Test {
public static void main(String[] args) {
Phone p = new Phone();
SmartPhone s = new SmartPhone();
Phone p1 = (Phone)s; //조상타입으로 형변환
p1.num();
p1.color();
p1.user();
// p1.name1(); 에러!!!
SmartPhone s1 = (SmartPhone) p;//자손타입으로 형변환
s1.num();
s1.color();
s1.user();
s1.name1();
}
}
class Phone{
void num() {}
void color() {}
void user() {}
}
class SmartPhone extends Phone{
void name1() {}
}
2. 추상 클래스(abstract class)
미완성 메서드 포함된 클래스, 인스턴스 생성 불가.
abstract class Phone{ //추상 클래스
abstract void num(int number);
}
class SmartPhone extends Phone{
void num(int number) {} //추상 메서드 구현
void name1() {}
}
abstract class CellPhone extends Phone{
void num(int number) {} //추상 메서드 구현
}
추상 클래스 쓰는 예시
class SmartPhone {
int x,y;
void num(String x, int y) {}
void name() {}
void client() {}
}
class CellPhone {
int x,y;
void num(String x, int y) {}
void name() {}
void user() {}
}
//SmartPhone클래스와 CellPhone 클래스에서
//공통된 부븐을 뽑아내어 하나의 클래스로 만들음
abstract class Phone{
int x, y;
abstract void num(String x, int y);
void name() {}
}
class SmartPhone extends Phone{
void num(String x, int y) {}
void client() {}
}
class CellPhone extends Phone{
void num(String x, int y) {}
void user(){}
}
3. 인터페이스(interface)
인터페이스는 접근제어자로 public 또는 default만 사용할 수 있다.
조건
1. 모든 멤버변수는 public static final 이며, 생략 가능하다.
2. 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다.
(static 메서드와 default메서드는 예외)
interface Phone{
void num(int x, int y);
}
interface Smart{
void user(String name);
}
class SmartPhone implements Phone,Smart{
public void num(int x, int y) {} //public 안쓰면 에러!
public void user(String name) {}
}
인터페이스 장점
1. 개발시간 단축
2. 표준화 가능
3. 서로 관계없는 클래스들에게 관계를 맺어줄 수 있음
4. 독립적인 프로그래밍 가능
4. 내부 클래스(inner class)
내부 클래스 장점
1. 내부 클래스에서 외부 클래스의 멤버들 쉽게 접근 가능.
2. 코드 복잡성 줄일 수 있음 (캡슐화)
class A{//외부 클래스
class B{//내부 클래스
}
}
5. 익명 클래스(anonymous class)
*클래스의 선언과 객체의 생성을 동시에 하기 때문에 단 한번만 사용될 수 있고 오직 하나의 객체만을 생성할 수 있는 일회용 클래스이다.
*생성자를 가질 수 없다.
*오로지 단 하나의 클래스를 상속받거나 단 하나의 인터페이스만 구현할 수 있음
public class Chap16 {
Object iv= new Object() {void method(){}};
void Method() {
Object lv = new Object() {void method(){}};
}
}
2021.04.26 - [(JAVA)자바/(JAVA)자바 문법] - (JAVA)자바 객체지향 언어 개념 중요 부분 총정리 part1
2021.04.27 - [(JAVA)자바/(JAVA)자바 문법] - (JAVA)자바 객체지향 언어 개념 중요 부분 총정리 part2
2021.04.28 - [(JAVA)자바/(JAVA)자바 문법] - (JAVA)자바 객체지향 언어 개념 중요 부분 총정리 part3
'(JAVA)자바 > (JAVA)자바 문법' 카테고리의 다른 글
(JAVA) 자바 HashMap (0) | 2021.05.01 |
---|---|
(JAVA)자바 객체지향 언어 개념 중요 부분 총정리 part3 (0) | 2021.04.28 |
(JAVA)자바 객체지향 언어 개념 중요 부분 총정리 part1 (0) | 2021.04.26 |
(JAVA) 자바 향상된 for문/자바 for 문/자바 향상된 for문 예제 (0) | 2021.04.05 |
자바 큐 활용 / 자바 Queue 활용 / 자바 큐 사용법 / 큐 사용 예제 (0) | 2021.04.04 |
댓글