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개 } }
Ch6-38_변수의 초기화
2022. 2. 13. 21:54
JAVA/Chapter6
Ch6-38 변수의 초기화 - 지역변수(lv)는 수동 초기화 해야함(사용전) - 멤버변수(iv, cv)는 자동 초기화 된다. class InitTest{ int x; // 인스턴스 변수 int y = x; // 인스턴스 변수 void method1(){ int i; // 지역 변수 int j = i; // 에러, 지역변수를 초기화 하지 않고 사용 } } 자료형 기본값 boolean false char '\u0000' byte, short, int 0 long 0L float 0.0f double 0.0d 또는 0.0 참조형 null Ch6-39 멤버변수의 초기화 1. 명시적 초기화(=) class car{ int door = 4; // 기본형(primitive type) 변수의 초기화 Engine e =..
Ch6-36_생성자 this()
2022. 2. 13. 16:15
JAVA/Chapter6
Ch6-36_생성자 this() 1. 생성자에서 다른 생성자 호출할 때 사용 2. 다른 생성자 호출 시 첫 줄에서만 사용가능 class Car2 { String color; // 색상 String gearType; // 변속기 종류 - auto(자동), manual(수동) int door; // 문 개수 Car2() { this("white", "auto", 4); } Car2(String color) { this(color, "auto", 4); } Car2(String color, String gearType, int door) { this.color = color; this.gearType = gearType; this.door = door; } } Ch6-37_참조변수 this() 1.인스턴스 자..