Ch7-51_익명 클래스(anonymous class)
2022. 2. 21. 11:31
JAVA/Chapter7
Ch7-42_내부 클래스(inner class)
2022. 2. 21. 01:42
JAVA/Chapter7
class AAA{ //AAA는 BBB클래스의 외부 클래스 int i = 100; BBB b = new BBB(); class BBB{ //BBB는 AAA클래스의 내부 클래스 void method(){ // AAA a = new AAA(); // System.out.println(a.i); System.out.println(i); //객체 생성없이 외부 클래스의 멤버 접근가능 } } } //class CCC{ // BBB b = new BBB(); //} public class InnerTest { public static void main(String[] args){ // BBB b = new BBB(); // b.method(); } }
Ch7-40_디폴트 메서드와 static 메서드
2022. 2. 20. 17:19
JAVA/Chapter7
Ch7-40_디폴트 메서드와 static 메서드 1. 인터페이스에 디폴트 메서드, static 메서드 추가 가능.(JDK1.8부터) 2. 인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려움 3. 해결책 : 디폴트 메서드(default method) 4. 디폴트 메서드는 인스턴스 메서드(인터페이스 원칙 위반) = 예외 interface MyInterface { void method(); void newMethod(); // 추상 메서드 } interface MyInterface { void method(); default void newMethod() {} } 5. 디폴트 메서드가 기존의 메서드와 충돌할 때의 해결책 1. 여러 인터페이스의 디폴트 메서드 간의 충돌 : 인터페이스를 구현한 클래스에서 ..
Ch7-39_인터페이스의 장점
2022. 2. 20. 08:43
JAVA/Chapter7
class A { public void method(I i) { // 인터페이스 I를 구현한 놈들만 들어와라 i.method(); } } // B클래스의 선언과 구현을 분리 interface I { public void method(); } class B implements I { public void method() { System.out.println("methodB()"); } } class C implements I { public void method() { System.out.println("methodC()"); } } class InterfaceTest { public static void main(String args[]) { A a = new A(); a.method(new C()); ..
Ch7-38_인터페이스를 이용한 다형성
2022. 2. 19. 09:43
JAVA/Chapter7
Ch7-38_인터페이스를 이용한 다형성 1. 인터페이스도 구현 클래스의 부모인가 2. 인터페이스 타입 매개변수는 인터페이스를 구현한 클래스의 객체만 가능 class Fighter extends Unit implements Fightable { public void move(int x, int y) {...} public void attack(Fightable f) {...} } Unit u = new Fighter(); Fightable f = new Fighter(); f.move(100, 200); f.attack(new Fighter()); interface Fightable { void move(int x, int y); void attack(Fightable f); } 3. 인터페이스를 메서드의..
Ch7-35_인터페이스(interface)
2022. 2. 18. 23:05
JAVA/Chapter7
Ch7-34_추상클래스의 작성
2022. 2. 18. 12:07
JAVA/Chapter7
public class Ex7_10 { public static void main(String[] args) { Unit[] group = { new Marine(), new Tank(), new Dropship() }; for (int i = 0; i < group.length; i++) group[i].move(100, 200); } } abstract class Unit { int x, y; abstract void move(int x, int y); void stop() { /* 현재 위치에 정지 */ } } class Marine extends Unit { // 보병 void move(int x, int y) { System.out.println("Marine[x=" + x + ",y=" + y..
Ch7-31_추상 클래스(abstract class)
2022. 2. 18. 10:12
JAVA/Chapter7
abstract class Player{ abstract void play(int pos); abstract void stop(); } class AudioPlayer extends Player{ void play(int pos){ System.out.println(pos + "위치부터 play합니다."); } void stop(){ System.out.println("재생을 멈춥니다."); } } public class PlayerTest{ public static void main(String[] args){ Player ap = new AudioPlayer(); ap.play(100); ap.stop(); } }
Ch7-29_여러 종류의 객체를 배열로 다루기
2022. 2. 17. 09:26
JAVA/Chapter7
package com.fastcampus.ch3; class Product { int price; int bonusPoint; Product(int price){ this.price = price; bonusPoint = (int)(price/10.0); } } class Tv1 extends Product{ Tv1() { super(100); } public String toString(){return "TV";} } class Computer extends Product{ Computer() {super(200);} public String toString() {return "Computer";} } class Audio extends Product{ Audio() {super(50);} public..
Ch7-27_매개변수의 다형성
2022. 2. 16. 18:15
JAVA/Chapter7
Ch7-26_instanceof 연산자
2022. 2. 16. 17:33
JAVA/Chapter7
Ch7-26_instanceof 연산자 1. 참조변수의 형변환 가능여부 확인에 사용. 가능하면 true 반환 2. 형변환 전에 반드시 instanceof로 확인해야 함 void doWork(Car c) { if(c instanceof FireEngine) { // 형변환이 가능한지 확인 FireEngine fe = (FireEngine)c; // 형변환 fe.water(); ... FireEngine fe = new FireEngine(); System.out.println(fe instanceof Object); // true System.out.println(fe instanceof Car); // true System.out.println(fe instanceof FireEngine); // tru..
Ch7-24_참조변수의 형변환
2022. 2. 16. 13:41
JAVA/Chapter7
Ch7-24_참조변수의 형변환 1. 사용할 수 있는 멤버의 개수를 조절하는 것 2. 조상 자손 관계의 참조변수는 서로 형변환 가능 class Car {} class FireEngine extends Car {} class Ambulance extends Car {} FireEngine f = new FireEngine(); Car c = (Car)f; // OK. 조상인 Car타입으로 형변환(생략가능) FireEngine f2 = (FireEngine)c; // OK. 자손인 FireEngine타입으로 형변환(생략불가) Ambulance a = (Ambulance)f; // 에러. 상속관계가 아닌 클래스 간의 형변환 불가
Ch7-23_다형성(polymorphism)
2022. 2. 16. 09:13
JAVA/Chapter7
Ch7-23_다형성(polymorphism) 1. 여러가지 형태를 가질 수 있는 능력 2. 조상 타입 참조 변수로 자손 타입 객체를 다루는 것 3. 객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때의 차이 - 참조변수로 사용할 수 있는 멤버의 개수가 달라집니다. class Tv { boolean power; int channel; void power() { power = !power; } void channelUp() { ++channel; } void channelDown() { --channel; } } class SmartTv extends Tv { String text; void caption() {} } SmartTv s = new SamrtTv(); // 참조 변수와 인스턴스의 타입이 일..
Ch7-21_접근 제어자(access modifier)
2022. 2. 15. 14:11
JAVA/Chapter7
Ch7-21_접근 제어자(access modifier) private : 같은 클래스 내에서만 접근이 가능하다. default : 같은 패키지 내에서만 접근이 가능하다. protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능하다. public : 접근 제한이 전혀 없다. 제어자 같은 클래스 같은 패키지 자손 클래스 전체 public O O O O protected O O O default O O private O
Ch7-7_오버라이딩(overriding)
2022. 2. 15. 02:32
JAVA/Chapter7
Ch7-7_오버라이딩(overriding) 상속받은 조상의 메서드를 자신에 맞게 변경하는 것 class Point { int x; int y; String getLocation() { return "x :" + x + ", y :" + y; } } class Point3D extends Point { int z; String getLocation() { return "x :" + x + ", y :" + y + ", z :" + z; } } Ch7-8_오버라이딩의 조건 1. 선언부가 조상 클래스의 메서드와 일치해야 한다. 2. 접근 제어자를 조상 클래스의 메서드 보다 좁은 범위로 변경할 수 없다. 3. 예외는 조상 클래스의 메서드 보다 많이 선언할 수 없다. Ch7-9_오버로딩 vs. 오버라이딩 오버로딩..
Ch7-5_단일 상속(Single Inheritance)
2022. 2. 14. 22:36
JAVA/Chapter7
Ch7-5_단일 상속(Single Inheritance) Java는 단일 상속만을 허용한다.(C++은 다중상속 허용) class TvDVD extends Tv, DVD { // 에러! 조상은 하나만 허용된다. // ... } 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다. class Tv { boolean power; int channel; void power() { power = !power; } void channelUp() { ++channel; } void channelDown() { --channel; } } class DVD { boolean power; void power() { power = !power; } void play() {} void stop() {} void ..
Ch7-3_포함관계
2022. 2. 14. 16:56
JAVA/Chapter7
Ch7-3_포함관계 1. 포함(composite)이란? 클래스의 멤버로 참조변수를 선언하는 것 작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만든다. class Point { int x; int y; } class Circle { Point c = new Point(); int r; } Ch7-4_클래스 간의 관계 결정하기 상속 관계 : '~은 ~이다.(is - a)' 포함 관계 : '~은 ~을 가지고 있다.(has - a)' class Circle { Point c = new Point(); int r; } class Circle extends Point { int r; } 원(Circle)은 점(Point)이다. - Circle is a Point. 원(Circle)은 점(Point)을 가..
Ch7-1_상속(Inheritance)
2022. 2. 14. 13:45
JAVA/Chapter7
Ch7-1_상속(Inheritance) 1. 기존의 클래스로 새로운 클래스를 작성하는 것.(코드의 재사용) 2. 두 클래스를 부모와 자식으로 관계를 맺어주는 것 class Parent {} class Child extends Parent { } 1. 자손은 조상의 모든 멤버를 상속 받는다.(생성자, 초기화 블럭 제외) 2. 자손의 멤버 개수는 조상보다 적을 수 없다.(같거나 많다.) 3. 자손의 변경은 조상에 영향을 미치지 않는다. class Parent { int age; } class Child extends Parent { void play() { ... // 자신 멤버 1개, 상속 받을 멤버 1개 } }
Ch7-51_익명 클래스(anonymous class)
2021. 12. 16. 22:14
JAVA/Chapter7
익명 클래스(anonymous class) -이름이 없는 일회용 클래스. 정의와 생성을 동시에 new 조상클래스이름() { // 멤버 선언 } 또는 new 구현인터페이스이름() { // 멤버 선언 } class EX { Object iv = new Object() { void method() { } }; static Object cv = new Object() { void method() { } }; void myMethod() { Object lv = new Object() { void method() { } }; } }
Ch7-42_내부 클래스(inner class)
2021. 12. 16. 12:55
JAVA/Chapter7
CH7-42 내부 클래스 1. 클래스 안의 클래스 2. 내부 클래스의 장점 - 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다, - 코드의 복잡성을 줄일 수 있다.(캡슐화) package ch_7; class AAA{ // AAA는 BBB의 외부 클래스 int i = 100; BBB b = new BBB(); class BBB{///BBB는 AAA의 내부 클래스 void method() { //AAA a = new AAA(); //System.out.println(a.i); System.out.println(i); // 객체 생성 없이 외부 클래스의 멤보 접근 가능 } } } class CCC{ } public class InnerTest { public static void main(Str..