package Day09;
class A {
A(int a) {
}
}
class B extends A {
B() {
super(5); // 부모 생성자 호출
}
}
public class SuperTest {
}
package Day09;
abstract class P {
// 멤버 변수
int a;
// 일반 메서드
void print() {
System.out.println("출력합니다.");
}
abstract void abc(); // 추상 메서드
}
class C extends P {
void abc() {
}
}
public class AbstractClassTest {
static void main() {
// P p = new P(); // 에러가 난다.
C c = new C(); // 문제가 없다.
P p1 = new C();
}
}
package Day09;
interface Pi {
void abc();
int def(int a);
String print(String str);
}
interface Pi1 {
void kor();
}
class Ci implements Pi, Pi1 {
public void abc() {
}
public int def(int a) {
return 5;
}
public String print(String str) {
return "hello";
}
public void kor(){
}
}
public class InterfaceTest {
static void main() {
Pi pi = new Ci(); // 참조자료형변환
}
}
package Day09;
import java.util.Random;
// 동물 - 색깔, abstract talk()
abstract class Animal {
String color;
Animal() {
Random r = new Random();
String[] colors = {"빨간색", "파란색", "노란색", "초록색", "파란색", "남색", "보라색"};
color = colors[r.nextInt(colors.length)];
}
abstract void talk();
}
// 강아지(동물) talk 오버라이딩
class Dog extends Animal {
@Override
void talk() {
System.out.println("나는 " + color + " 강아지 입니다.");
}
}
// 고양이(동물) talk 오버라이딩
class Cat extends Animal {
@Override
void talk() {
System.out.println("나는 " + color + " 고양이 입니다.");
}
}
// 미어캣(동물) talk 오버라이딩
class Miacat extends Animal {
@Override
void talk() {
System.out.println("나는 " + color + " 미어캣 입니다.");
}
}
// 판다(동물) talk 오버라이딩
class Panda extends Animal {
@Override
void talk() {
System.out.println("나는 " + color + " 판다 입니다.");
}
}
public class Q1 {
static void main() {
Animal[] woori = new Animal[10];
Random r = new Random();
for (int i = 0; i < woori.length; i++) {
int select = r.nextInt(4); // 0, 1, 2, 3
if (select == 0) {
woori[i] = new Dog();
} else if (select == 1) {
woori[i] = new Cat();
} else if (select == 2) {
woori[i] = new Miacat();
} else {
woori[i] = new Panda();
}
}
for (int i = 0; i < woori.length; i++) {
woori[i].talk();
}
}
}
package Day09;
// 태그 # interface 다중상속 가능해서
interface Repairable {}
interface Heal{}
class Unit {
int attack;
int hitPoint;
final int MAX_HP; // 상수
Unit(int hp, int attack) {
MAX_HP = hp;
this.attack = attack;
}
}
class GroundUnit extends Unit {
GroundUnit(int hp, int attack) {
super(hp, attack);
}
}
class AirUit extends Unit {
AirUit(int hp, int attack) {
super(hp, attack);
}
}
class Marine extends GroundUnit implements Heal {
Marine() {
super(40, 6);
hitPoint = MAX_HP;
}
}
class Medic extends GroundUnit implements Heal {
Medic() {
super(80, 0);
hitPoint = MAX_HP;
}
// 힐을 가지고 있는 객체만 통과 시킨다.
void heal(Heal h) {
if (h instanceof Unit) {
Unit u = (Unit)h; // 참조자료형 변환
if (u != null && u.MAX_HP != u.hitPoint) {
u.hitPoint += 2;
}
}
}
}
class Tank extends GroundUnit implements Repairable {
Tank() {
super(150, 10);
hitPoint = MAX_HP;
}
//
public String toString() {
return "Tank";
}
}
class SCV extends GroundUnit implements Repairable {
SCV() {
super(60, 5);
hitPoint = MAX_HP;
}
void repair(Repairable r) {
if (r instanceof Unit) {
Unit u = (Unit) r; // 참조 자료형 변환
if (u != null && u.MAX_HP != u.hitPoint) {
u.hitPoint +=2;
}
}
}
}
public class AbstractTest {
static void main() {
Tank tank = new Tank();
Marine marine = new Marine();
SCV scv = new SCV();
Medic medic = new Medic();
scv.repair(tank); // 된다.
medic.heal(marine); // 된다.
// scv.repair(marine); // 에러
// medic.heal(tank); // 에러
System.out.println(medic);
}
}
package Day09;
class Box<T> {
T vol;
void setVol(T v) {
vol = v;
}
T getVol() {
return vol;
}
}
public class GenericTest {
static void main() {
Box<Integer> ibox = new Box<>();
ibox.setVol(200);
System.out.println(ibox.getVol());
Box<Double> dbox = new Box<>();
dbox.setVol(2.78);
System.out.println(dbox.getVol());
Box<String> sbox = new Box<>();
sbox.setVol("안녕하세요");
System.out.println(sbox.getVol());
}
}
package Day09;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class ListTest1 {
static void main() {
// TODO Auto-generated method stub
String[] name = {"kim", "lee", "park", "jung", "oh"}; // 문자열 배열
// 배열리스트 객체를 만드는 데이터 값으로 String[] name
ArrayList<String> lname = new ArrayList<>(Arrays.asList(name));
System.out.println("초기 값: " + lname);
lname.add("ha");
System.out.println("\"ha\" 추가된 후의 값: " + lname);
lname.set(0, "김");
lname.set(3, "곽");
System.out.println("\"김\"으로 변경되고 \"곽\"이 추가된 값: " + lname);
Collections.shuffle(lname);
System.out.println("shuffle() 메서드가 적용된 값: " + lname);
Collections.sort(lname);
System.out.println("sort() 메서드가 적용된 값: " + lname);
System.out.println("5번째 요소의 값: " + lname.get(4));
Collections.fill(lname, "김");
System.out.println("모든 요소를 \"김\" 으로 설정된 값: " + lname);
}
}
package Day09;
import java.sql.Array;
import java.util.ArrayList;
class KOR {
int a;
int b;
KOR(int a, int b) {
this.a = a;
this.b = b;
}
void print() {
System.out.println("a: " + a + " b: " + b);
}
}
public class ListTest2 {
static void main() {
ArrayList<KOR> list = new ArrayList<>();
list.add(new KOR(1, 3));
list.get(0).a = 30;
list.get(0).print(); // a: 30 b: 3
// list.get(1).a = 40;
for (int i = 0; i < 10; i++) {
list.add(new KOR(i, i+i));
}
for (int i = 0; i < list.size(); i++) {
list.get(i).print();
}
}
}
package Day09;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
public class SetTest1 {
static void main() {
// TODO Auto-generated method stub
HashSet<Integer> odd = new HashSet<Integer>();
HashSet<Integer> even = new HashSet<Integer>();
for (int i = 0; i < 5; i = i+2) {
odd.add(i);
even.add(i+1);
}
boolean setChanged = odd.add(5);
System.out.println("odd에 5 추가 성공?: " + setChanged);
setChanged = even.add(12);
System.out.println("even에 12 추가 성공?: " + setChanged);
System.out.println("odd 집합: " + odd);
System.out.println("even 집합: " + even);
System.out.println("odd에서 가장 작은 값은: " + Collections.min(odd));
System.out.println("even에서 가장 작은 값은: " + Collections.min(even));
// set은 인덱스 순서가 없어서
// 반복을 돌리면 iterator를 사용해야 한다.
Iterator<Integer> it = even.iterator();
int sum = 0;
while (it.hasNext()) {
sum = sum + it.next();
}
System.out.println("even 집합의 합은: " + sum);
}
}
package Day09;
import java.util.HashSet;
import java.util.Iterator;
public class SetTest2 {
static void main() {
HashSet<KOR> set = new HashSet<>();
set.add(new KOR(5, 6));
set.add(new KOR(7,8));
Iterator<KOR> it = set.iterator();
int num = 1;
while (it.hasNext()) {
KOR kor = it.next();
if (kor.a == 8 || kor.b == 8) {
System.out.println(num + "번째 있습니다.");
}
num++;
}
}
}
package Day09;
import java.util.ArrayList;
import java.util.Scanner;
class PhoneData{
String name;
String tel;
String addr;
String age; // 20세
PhoneData(String name, String tel, String addr, String age){
this.name = name;
this.tel = tel;
this.addr = addr;
this.age = age;
}
}
public class Q2 {
static void main() {
//문제점 1번 -> 중복된 이름 이거에 대한 해결
//문제점 2번 -> 전체출력 바로 시전 아무것도 안나와요
//1. 입력
Scanner sc = new Scanner(System.in);
//2. List
ArrayList<PhoneData> telList = new ArrayList<>();
while(true){
System.out.print("1.추가 2.삭제 3.전체출력 4.이름검색 5.종료 : ");
int num = sc.nextInt();
if(num == 1){
System.out.print("이름:");
String name = sc.next();
System.out.print("전화번호:");
String tel = sc.next();
System.out.print("주소:");
String addr = sc.next();
System.out.print("나이:");
String age = sc.next();
telList.add(new PhoneData(name,tel,addr,age));
System.out.println(name+"을 추가했습니다.");
}
else if(num == 2){
System.out.print("이름 : ");
String name = sc.next();
// 공부하세요
ArrayList<Integer> checkList = new ArrayList<>();
for(int i = 0;i<telList.size();i++){
if(telList.get(i).name.equals(name)){
checkList.add(i);
}
}
if(checkList.size() == 0){
System.out.println("삭제할 이름이 없습니다.");
}
else{
for(int i = checkList.size()-1;i>=0;i--){
System.out.println(telList.get(checkList.get(i)).name+"삭제 했습니다.");
//System.out.println(checkList.get(i));
telList.remove(checkList.get(i).intValue());
//telList.remove(0);
}
}
}
else if(num == 3){
if(telList.size() == 0){
System.out.println("전화번호부가 없습니다.");
continue;
}
for(int i = 0;i<telList.size();i++){
System.out.println("이름 : "+telList.get(i).name+", 전화번호 : "+telList.get(i).tel+
", 주소 : "+telList.get(i).addr+", 나이 : "+telList.get(i).age);
}
}
else if(num == 4){
System.out.print("이름 : ");
String name = sc.next();
boolean check = true;
for(int i = 0;i<telList.size();i++){
if(telList.get(i).name.equals(name)){
System.out.println("이름 : "+telList.get(i).name+", 전화번호 : "+telList.get(i).tel+
", 주소 : "+telList.get(i).addr+", 나이 : "+telList.get(i).age);
check = false;
}
}
if(check){
System.out.println("찾는 이름이 없습니다.");
}
}
else if(num == 5){
System.out.println("프로그램을 종료합니다.");
break;
}
else{
System.out.println("잘못된 입력입니다.");
}
}
}
}
package Practice5;
/*
[인터페이스 기초]
- Animal 인터페이스 생성
- sound() 메서드 선언
- Dog 클래스에서 implements
- sound() 오버라이딩 ("멍멍")
- main()에서 객체 생성 후 sound() 호출
*/
// 인터페이스 선언
interface Animal {
// 추상 클래스
void sound();
}
class Dog implements Animal {
// 오버라이딩
@Override
public void sound() {
System.out.println("멍멍");
}
}
public class Q1 {
static void main() {
Dog dog = new Dog();
dog.sound();
}
}
package Practice5;
/*
[인터페이스 기초 2]
- Moveable 인터페이스 생성
- move() 메서드 선언
- Car, Person 클래스에서 implements
- 각자 다른 내용 출력
- main()에서 두 객체 생성 후 move() 호출
*/
interface Moveable {
void move();
}
class Car implements Moveable {
@Override
public void move() {
System.out.println("자동차가 달립니다.");
}
}
class Person implements Moveable {
@Override
public void move() {
System.out.println("사람이 걷습니다.");
}
}
public class Q2 {
static void main() {
Car c1 = new Car();
Person p1 = new Person();
c1.move();
p1.move();
}
}
package Practice5;
/*
[인터페이스 활용]
- Animal 인터페이스 생성
- sound() 메서드 선언
- Dog 클래스 구현 ("멍멍")
- Cat 클래스 구현 ("야옹")
- Animal 타입의 변수로
Dog 객체와 Cat 객체를 각각 저장
- sound() 호출
*/
interface Animal1 {
void sound();
}
class Dog1 implements Animal1{
public void sound() {
System.out.println("멍멍");
}
}
class Cat1 implements Animal1{
public void sound() {
System.out.println("야옹");
}
}
public class Q3 {
static void main() {
Animal1 a1 = new Dog1();
Animal1 a2 = new Cat1();
a1.sound();
a2.sound();
}
}
package Practice5;
interface Animal2 {
void sound();
}
class Dog2 implements Animal2 {
public void sound() {
System.out.println("멍멍");
}
}
class Cat2 implements Animal2 {
public void sound() {
System.out.println("야옹");
}
}
public class Q4 {
static void playSound(Animal2 animal2) {
animal2.sound();
}
static void main() {
Dog2 dog2 = new Dog2();
Cat2 cat2 = new Cat2();
playSound(dog2);
playSound(cat2);
}
}
package Practice5;
/*
[추상 클래스 기초]
- Animal 추상 클래스를 만든다.
- name 필드를 만든다.
- eat() 일반 메서드를 만든다.
→ "먹이를 먹습니다." 출력
- sound() 추상 메서드를 만든다.
- Dog 클래스는 Animal 상속
→ sound() 오버라이딩
→ "멍멍" 출력
- main()에서 Dog 객체 생성
- eat(), sound() 호출
*/
// 추상 클래스
abstract class Animal3 {
// 이름
String name;
// 일반 메서드
void eat() {
System.out.println("먹이를 먹습니다.");
}
// 추상 메서드
abstract void sound();
}
class Dog3 extends Animal3 {
// 오버라이딩
@Override
public void sound() {
System.out.println("멍멍");
}
}
public class Q5 {
static void main() {
// 객체 생성
Dog3 dog3 = new Dog3();
// 불러오기
dog3.sound();
dog3.eat();
}
}
package Practice5;
abstract class Shape {
String name;
abstract void draw();
}
class Circle extends Shape {
@Override
public void draw() {
System.out.println("원을 그린다.");
}
}
class Rectangle extends Shape {
@Override
public void draw() {
System.out.println("사각형을 그린다.");
}
}
public class Q6 {
static void main() {
Shape a1 = new Circle();
Shape a2 = new Rectangle();
a1.draw();
a2.draw();
}
}
오늘은 추상과 List에 대해 배웠다.
아직 좀 많이 어려워서 개인 공부를 많이 해야 될 거 같다.