JAVA 66

객체지향 매개변수의 다형성 예제

class Product { int price; // 제품의 가격 int bonusPoint; // 제품구매 시 제공하는 보너스 점수 Product(int price){ this.price = price; bonusPoint = (int)(price/10.0); //보너스 점수는 제품가격의 10% } } class Tv1 extends Product{ Tv1(){ //조상클래스의 생성자 Product(int price)를 호출한다. super(100); //Tv의 가격을 100만원으로 한다. } // Object클래스의 toString()을 오버라이딩한다. puvlic String toString() { return "Tv"; } } class Buyer { // 고객 물건을 사는 사람 int money..

JAVA 2022.09.26

객체지향 instanceof 연산자

참조변수의 형변환 가능여부 확인에 사용. 가능하면 true를 반환. 형변환 전에 반드시 instanceof로 확인해야 한다. void doWork(Car c) { //참조변수 타입Car (Car c 대신 new Car(),new FireEngin()등 올수있다) if (c instanceof FireEngine){ //1. 형변환 가능한지 확인 FireEngine fe = (FireEngine)c; //2. 형변환 fe.water(); } } 더보기 형변환을 하는 이유는 인스턴스의 원래 기능을 모두 사용하려고. Car타입의 리모콘인 c로는 water()를 호출할수 없으니 리모콘을 FireEngine타입으로 바꿔서 water()를 호출 FireEngine fe = new FireEngine(); sysou..

JAVA 2022.09.26

객체지향 참조변수의 형변환

사용할 수 있는 멤버의 갯수를 조절하는것 조상 자손 관계의 참조변수는 서로 형변환 가능 class Car { String color; int door; void drive() { // 운전 하는 기능 sysout("drive, brrrr~") } void stop() { // 멈추는 기능 sysout("stop"); } } Car를 부모로하는 FireEngine class FireEngine extends Car { // 소방차 void water() { // 물을 뿌리는 기능 sysout("water"); } } 실행 코드 FireEngine f = new FireEngine(); Car c = (Car)f; // ok 조상인 Car타입으로 형변환 (생략가능) FireEngine f2 = (FireEn..

JAVA 2022.09.26

객체지향 super() - 조상의 생성자

조상의 생성자를 호출할 때 사용 ( super와는 다르다 연관 없음 ) 조상의 멤버는 조상의 생성자를 호출해서 초기화 class Point { int x, y; Point(int x, int y){ this.x = x; this.y = y; } } class Point3D extends Point{ int z; Point3D(int x, int y, int z){ super(x, y); // 조상클래스의 생성자 Point(int x, int y)를 호출 this.z = z; // 자신의 멤버를 초기화 } } 생성자의 첫 줄에 반드시 생성자를 호출해야 한다. 그렇지 않으면 컴파일러가 생성자의 첫 줄에 super():를 삽입 클래스를 만들때 기본생성자 작성은 필수 class Point extends Obje..

JAVA 2022.09.26

객체지향 참조변수 super

객체 자식을 가르키는 참조변수. 인스턴스 매서드(생성자)내에만 존재 조상의 멤버를 자신의 멤버와 구별할 때 사용 public class Super { public static void main(String[] args) { Child c = new Child(); c.method(); } } class Parent { int x = 10; /* super.x */ } class Child extends Parent { int x = 20; //this.x void method() { System.out.println("x=" + x); System.out.println("this.x=" + this.x); System.out.println("super.x=" + super.x); } } ---------..

JAVA 2022.09.26

객체지향 메서드 오버라이딩(overriding)

overriding - 덮어쓰다 상소받은 조상의 메서드를 자신에 맞게 변경하는것 선언부가 조상 클래스의 메서드와 일치해야 한다. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다. 예외는 조상 클래스의 매서드보다 많이 선언할 수 없다. class Mypoint3 { int x; int y; String getLocation() { return "x:" +x+", y:" +y; } } class MyPoint3D extends MyPoint3{ int z; // 조상의 getLocation()을 오버라이딩 //호출부만 가능 String getLocation() { return "x:" +x+", y:" +y+", z:"+z; } } public class OverrideTest { pub..

JAVA 2022.09.25

객체지향 상속(inheritance)

기존의 클래스로 새로운 클래스를 작성하는 것. (코드의 재사용) 두 클래스를 부모와 자식으로 관계를 맺어주는 것. 더보기 class 자식클래스 extends 부모클래스 {..} class Parent {} class Child extends Parent {..} 자손은 조상의 모든 멤버를 상속 받는다.(생성자, 초기화 블럭 제외) 자손의 멤버 개수는 조상보다 적을 수 없다. (같거나 많다.) 자손의 변경은 조상에 영향을 미치지 않는다. 사용 예제 class Tv { boolean power; // 전원상태(on/off) int channel; // 채널 void power() { power = !power; } void channelUp() { ++channel; } void channelDown() {..

JAVA 2022.09.25