반응형
- 정적 메소드는 오버라이딩 되지 않음
public class Figure {
static void area() {
System.out.println("도형의 넓이");
}
}
==========================================
class Circle extends Figure {
static void area() {
System.out.println("도형의 넓이");
}
}
==========================================
public class FigureMain {
public static void main(String[] args) {
Circle.area();
Figure.area();
}
}
값
도형의 넓이
도형의 넓이
- 마치 오버라이딩이 된 것처럼 보인다.
- 하지만 이것은 오버라이딩이 아니라 하이딩이다.
- @Override 어노테이션을 추가하면 컴파일 에러가 난다
- 상속할 수 없는 final 클래스
- final이 선언된 클래스는 상속할 수 없다.
오류 내용 : The type SmartPhone cannot subclass the final class Phone
- 오버라이딩도 불가능
- protected 접근 제한자
- 상속과 관련된 접근 제한자
- 동일 패키지 클래스 객체에서 접근할 수 있다.
- 다른 패키지의 상속관계가 있는 클래스 객체에서 접근할 수 있다.
- 다형성 (Polymorphism)
- 상위클래스 타입에 하위클래스 타입을 할당할 수 있다.
- 하위클래스 타입이 상위클래스 타입에 할당되면 자동타입 변환이 일어난다.
// 상위클래스
public class Hero {
void move() {
System.out.println("이동");
}
void attack() {
System.out.println("공격");
}
void useUlt() { // 오버라이딩 대상
System.out.println("궁극기");
}
}
=========================================
// 하위클래스
public class Arthas extends Hero{
@Override
void useUlt() {
System.out.println("궁극기 사용 : 사자의 군대");
}
// 상위타입(Hero)에 정의되지 않은 메소드
void infoArthas() {
System.out.println("아서스 정보");
}
}
=========================================
// 메인클래스
public class HeroMain {
public static void main(String[] args) {
Arthas a1 = new Arthas();
a1.attack();
a1.move();
a1.infoArthas();
a1.useUlt(); // 오버라이딩 메소드
// Hero클래스에 정의된 메서드만 접근가능함
// a2는 Hero 타입의 참조변수
// a2는 Hero클래스에 정의된 메소드에만 접근가능하다.
Hero a2 = new Arthas();
// a2.infoArthas(); 접근 불가
a2.attack();
a2.move();
a2.useUlt(); // Arthas클래스의 메소드에 접근
}
}
- List<E> 사용
import java.util.ArrayList;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
// List 인터페이스
// 구현클래스 : ArrayList, LinkedList (사용법은 둘다 거의 동일)
List<String> list = new ArrayList<String>();
list.add("고길동");
list.add("둘리");
list.add("희동이");
list.add("도우너");
System.out.println(list);
list.remove("도우너");
System.out.println(list);
list.remove(0);
System.out.println(list);
}
}
배열보다 쓰기 편하다.
List<E> : E 부분에 자료타입을 넣으면 됨. ex) List<String> 변수명;
- List<E> toString() 처리
import java.util.ArrayList;
import java.util.List;
public class ListExample2 {
public static void main(String[] args) {
List<Contact> contactList = new ArrayList<>();
Contact contact1 = new Contact("김철수", "01011112222");
Contact contact2 = new Contact("박길동", "01033334444");
contactList.add(contact1);
contactList.add(contact2);
contactList.add(new Contact("김민수", "01000000000"));
System.out.println(contactList);
}
}
// 처음 리스트 생성후 출력하면 해쉬값이 뜸
// [exma17.Contact@7d6f77cc, exma17.Contact@5aaa6d82, exma17.Contact@73a28541]
// 이것을 처리하기위해 상위 클래스에 toString() 생성 해준다.
=================================================
public class Contact {
private int id; // 자동생성
private String name;
private String phoneNumber;
`
`
`
// 이 메소드를 만들어준다.
@Override
public String toString() {
return "Contact [이름 : " + name + ", 연락처 : " + phoneNumber + "]";
}
}
toString() 만드는 법
- 빈 곳을 클릭하고 shift + alt + s 누른 뒤
- Generate toString()... 클릭 후
- 만들것 체크하고 Generate 버튼 클릭
반응형
'학습 > JAVA' 카테고리의 다른 글
8. 인터페이스 (0) | 2022.10.17 |
---|---|
7. 상속(Inheritance) (강제타입 변환, instanceof, 추상(abstract)클래스 (0) | 2022.10.17 |
7. 상속(Inheritance) (Override, Annotation, toString()) (1) | 2022.10.11 |
7. 상속(Inheritance) (상속, 부모 생성자 호출 super()) (0) | 2022.10.11 |
6. 클래스(정적(static), 인스턴스, 싱글톤(singleton), 상수, 접근 제한자, Getter & Setter (1) | 2022.10.07 |
댓글