
추상메서드만으로 구성되어 있는 것
추상메서드를 인터페이스를 통해 받으면 구현해줘야한다.
접근제어자 interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
...
public abstract 메소드이름(매개변수목록);
...
}
interface Animal { public abstract void cry(); }
class Cat implements Animal {
public void cry() {
System.out.println("냐옹냐옹!");
}
}
class Dog implements Animal {
public void cry() {
System.out.println("멍멍!");
}
}
public class Polymorphism03 {
public static void main(String[] args) {
Cat c = new Cat();
Dog d = new Dog();
c.cry();
d.cry();
}
}
상속과 구현을 동시에 할 수 있습니다.
class 클래스이름 extend 상위클래스이름 implements 인터페이스이름 { ... }
object class가 모든 클래스의 부모다.
너무 당연해서 extends object를 쓰지 않는다.
object class는 모든 타입을 수용할 수 있다.
원시자료형 int, float는 부모가 없다. 그래서 담을 수 있게 Wrapper class가 있다.
int를 감싸고 있는 것이 Integer
Integer n1 = new Integer(10);
Integer n2 = Integer.valueOf(10);

별도로 class B를 만들었는데, 그것도 Object배열에 추가가 가능하다.
Object배열에 B를 넣는 것도 가능하고 B.getS()를 넣는 것도 가능하다.
package ex0407;
import java.util.Scanner;
public class Test {
static int start = 0;
public static void main(String[] args) {
Object[] o = new Object[5];
int temp = 0;
o=inputArr(o,start);
while(true) {
printArr(o);
Scanner sc = new Scanner(System.in);
System.out.println("배열을 늘리시겠습니까?(Y:0, N:1)");
temp=sc.nextInt();
if(temp==0) {
o = extendArr(o);
o = inputArr(o, start);
}
else{
System.out.println("종료하겠습니다.");
break;
}
}
}
public static Object[] extendArr(Object[] o) {
Object[] o2 = new Object[o.length+5];
for(int j=0; j<o.length; j++) {
o2[j]=o[j];
}
o=o2;
start+=5;
System.out.println("배열의 길이를 늘렸습니다: "+o.length);
return o;
}
public static void printArr(Object[] o) {
System.out.println("===배열출력===");
for(int j=0; j<o.length; j++) {
System.out.print(o[j]+" ");
}
System.out.println("");
}
public static Object[] inputArr(Object[] o, int start) {
String s = "스트링";
Integer i = Integer.valueOf(3);
Float f = Float.valueOf(1.2f);
B b = new B(3, "B");
System.out.println(start+"번 인덱스부터 추가하겠습니다.");
for(int j=start; j<o.length; j++) {
if(j%4==1)
o[j] = s;
else if(j%4==2)
o[j] = i;
else if(j%4==3)
o[j] = b;
else
o[j] = f;
}
return o;
}
}

1단계 Object[]을 가진 클래스 생성

f1, f2, f3를 add 함수로 합치기

T는 어떤 타입이 들어와도 됨. String도 가능
public class Box<T> {
T x;
}


List<Integer> slist = new ArrayList<>();
slist.add(3);
slist.add(5);
System.out.println(slist);
결과: [3, 5]
List<Integer> list = new ArrayList<>();
for(int i=0; i<10; i++)
list.add(i+1);
for(int i=0; i<list.size(); i++)
System.out.print(list.get(i)+" ");
결과: 1 2 3 4 5 6 7 8 9 10
System.out.println(list.contains(xbox.t.x));
결과: true
(일반고객) 고객번호: c+순번, 이름, 연락처, 구매금액: 입력값
(vip고객) 고객번호: v+순번, 이름, 연락처, 구매금액: 입력값, 포인트
1,000,000원 초과시 vip고객으로 전환 vip고객이 되었다는 메시지 출력
vip고객의 포인트 = 구매금액의 5%
Member.java
package ex0407;
public class Member {
static private int index;
int m_no;
String name;
String phone;
int sale;
Member(){
m_no = ++index;
}
public int getM_no() {
return m_no;
}
public String getName() {
return name;
}
public String getPhone() {
return phone;
}
public int getSale() {
return sale;
}
/* 고객번호는 부여받는 것으로
public void setM_no(int m_no) {
this.m_no = m_no;
}*/
public void setName(String name) {
this.name = name;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void setSale(int sale) {
this.sale += sale;
if(this.sale>=1000000)
System.out.println(getName()+"님, VIP로 전환되었습니다.");
}
@Override
public String toString() {
return "[고객정보] 고객번호: c" + m_no + " | 이름: " + name + " | 연락처: " + phone + " | 구매금액: " + sale +"원";
}
}
VipMember.java
package ex0407;
public class VipMember extends Member{
static int index;
int point;
Member m;
VipMember(Member m){
m_no = ++index;
setName(m.getName());
setPhone(m.getPhone());
setSale(m.getSale());
setPoint(m.getSale());
}
public int getPoint() {
return point;
}
public void setPoint(int sale) {
this.point = (int)(sale*0.05);
}
@Override
public void setSale(int sale) {
this.sale += sale;
}
@Override
public String toString() {
return "[VIP 고객정보] 고객번호: v" + m_no + " | 이름: " + name + " | 연락처: " + phone + " | 구매금액: " + sale +"원" + " | 포인트: "+point+"p";
}
}
MemberTest.java
package ex0407;
public class MemberTest {
public static void main(String[] args) {
Member[] memberList = new Member[3];
Member m1 = new Member();
m1.setName("황기태");
m1.setPhone("010-1111-2222");
m1.setSale(200000);
m1.setSale(100000);
Member m2 = new Member();
m2.setName("김효수");
m2.setPhone("010-3333-4444");
m2.setSale(700000);
m2.setSale(300000);
Member m3 = new Member();
m3.setName("홍길동");
m3.setPhone("010-5555-6666");
m3.setSale(700000);
memberList[0]=m1;
memberList[1]=m2;
memberList[2]=m3;
System.out.println("========고객 정보 출력========");
for(int i=0; i<memberList.length; i++) {
if(memberList[i].sale>=1000000) {
VipMember v = new VipMember(memberList[i]);
memberList[i]=v;
}
System.out.println(memberList[i].toString());
}
System.out.println("==========================");
}
}
