Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 코딩일기
- 데이터베이스 JOIN
- 오라클
- 데이터베이스 기초
- 코딩초보자
- lenovo ideapad 3
- SQL
- 데이터베이스
- 자바입문
- 코딩입문
- 데이터베이스 집합연산자
- 가성비 노트북
- 코린이
- 라이젠노트북
- 레노버 슬림3
- 데이터베이스기초
- 자바초보
- 데이터베이스 UPDATE
- IdeaPad 3 15ABA7
- 개발자준비
- 슬림3
- 티모장인
- 사무용 노트북
- 레노버 노트북
- 탑마이장인
- 오라클 DELETE
- 레노버 아이디어패드 슬림3
- 데이터베이스 예제
- 데이터베이스 DELETE
- 오라클UPDATE
Archives
- Today
- Total
스퐁지송 개발노트
22.12.02(불금) 제네릭 / <? super Object> <? extend Object> 본문
728x90
<?> : 모든 자료형 가능 ,자료형:(int,str등등)
<? super Object> : Object의 부모클래스 자료형을 참조 가능
<? extend Object> : Object의 자식클래스 자료형을 참조 가능
package 제네릭;
//부모클래
public class Gen1 {
String name = "Gen1";
String getName() {
return name;
}
}
package 제네릭;
//자식클래스
public class Gen2 extends Gen1{
String name = "Gen2";
String getName() {
return name;
}
}
package 제네릭;
//손주클래스
public class Gen3 extends Gen2 {
String name = "Gen3";
String getName() {
return name;
}
}
package 제네릭;
public class Gen4<T> {
//T = Gen1 메인클래스에서 선언
T obj; //Gen1=g3
//obj=g3
//하지만g3은 손주클래스니 그 위 조부모,부모클래스(Gen1,Gen2)로도 인식가능
Gen4(T obj){
//obj = g3,Gen1 메인클래스에서 선언
this.obj = obj; //obj = g3
}
void set(T obj) {
this.obj=obj;
}
T get() {
return obj;
}
}
package 제네릭;
public class Main {
public static void main(String[] args) {
Gen3 g3 = new Gen3();
Gen4<? super Gen2/*자식*/> g2 = new Gen4<Gen1/*부모*/>(g3);
// Gen4클래스에 생성자를 만들었기때문에 ()안에 값을 넣어줘야함
// <? super Object> : Object의 부모클래스 자료형을 참조 가능
// 이기때문에 뒤에<>에 앞에 선언된 Gen2의 부모클래스(Gen1)를 입력
// Gen2 t1 = g2.get();
System.out.println(g2.obj);
Gen4<? extends Gen2/* 자식 */> g4 = new Gen4<Gen3/*부모*/>(g3);
//<? extend Object> : Object의 자식클래스 자료형을 참조 가능
g2.obj = g3;
System.out.println(g4.obj);
}
}
육지동물 울음소리로 예시 만듬 ㅋ 티모도 나옴 ㅋ
package 제네릭2;
//자식클래스
public class Dog extends LandAnimal{
void crying() {
System.out.println("멍멍");
}
}
package 제네릭2;
//상속받은거 없음
public class Sparrow{
void crying() {
System.out.println("짹쨱");
}
}
package 제네릭2;
public class Teemo extends LandAnimal{
void crying() {
System.out.println("헛 둘 셋 넷~ 크기가 전부는 아니잖아요~");
}
}
package 제네릭2;
//부모클래스
public class LandAnimal {
void crying() {
System.out.println("육지동물");
}
}
package 제네릭2;
//
import java.util.ArrayList;
public class AnimalList<T> {
ArrayList<T> al = new ArrayList<T>();
// T=Dog, al에 Dog르 저장
//자식클래스만 사용가능(Dog)
public static void cryingAnimalList(AnimalList<? extends LandAnimal> al) {
LandAnimal la = al.get(0);
//al의0번방을 가져옴,la은 al안의 LandAnimal관련 상속클래스만 가져올 수 있음
//자료형(LandAnimal),변수(la)
la.crying();
//la에 관련된 클래스의 crying 메서드 호출
}
void add(T animal) {
//T=dog Main문에서 받음 위 ArrayList<T>에 Dog보냄
al.add(animal);
}
T get(int index) {
return al.get(index);
}
}
package 제네릭2;
public class Main {
public static void main(String[] args) {
AnimalList<Dog> dogList = new AnimalList<>();
//AnimalList클래스에 T에 Dog를 보냄
//AnimalList에 관련된 객체생성(dog에 관련된)
dogList.add(new Dog());
AnimalList<Sparrow> SparrowList = new AnimalList<>();
//AnimalList에 관련된 객체생성
SparrowList.add(new Sparrow());
AnimalList<Teemo> TeemoList = new AnimalList<>();
TeemoList.add(new Teemo());
AnimalList.cryingAnimalList(dogList);
AnimalList.cryingAnimalList(TeemoList);
// AnimalList.cryingAnimalList(sparrowList);
}
}
결과
멍멍
헛 둘 셋 넷~ 크기가 전부는 아니잖아요~
728x90
'JAVA 입문 시작' 카테고리의 다른 글
22.12.02(불금) 자바안의 기본 람다 인터페이스 구현 (0) | 2022.12.02 |
---|---|
22.12.02(불금) 람다식 (익명함수) (0) | 2022.12.02 |
22.12.02 (불금) 제네릭 (0) | 2022.12.02 |
22.12.01(목) 커피관리자 만들기(Map사용해서) (0) | 2022.12.01 |
22.12.01(목) Map (0) | 2022.12.01 |
Comments