[JAVA] 인터페이스, 상속, 구현
·
프로그래밍/java
인터페이스(interface) 일종의 추상클래스로, 추상메서드를 갖지만 추상메서드보다 추상화 정도가 높다. 추상 클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 오직 추상메서드 + 상수만 멤버로 가질 수 있음. interface 인터페이스이름 { public static final 타입 상수이름 = 값; public abstract 메서드이름(매개변수s); } [인터페이스 멤버 제약사항] 1) 모든 멤버변수는 public static funal이어야 하고, 이를 생략할 수 있다. 2) 모든 메서드는 public abstract이어야 하며, 이를 생략할 수 있다. (단 static메서드와 default 메서드는 예외임) 생략된 제어자는 컴파일러가 자동으로 추가한다. int..
[JAVA] 추상 클래스와 추상 메서드 (abstract)
·
프로그래밍/java
추상 클래스 미완성 설계도. 미완성 클래스. 멤버의 개수에 관계된 것이 아니라 단지 미완성 메서드(추상 메서드)를 포함하고 있다는 의미이다. 미완성 설계도로 완성된 제품을 만들 수 없듯, 추상 클래스로 인스턴스를 생성할 수 없다. 추상 클래스는 상속을 통해.. 자손 클래스에 의해서만 비로소 "완성"될 수 있다. - 클래스로서의 역할을 할 수없음. - 새로운 클래스를 작성하는 데 있어서 바탕이 되는 조상 클래스로서 의미를 갖는다. - 아무 것도 없는 상태에서 시작하는 것보단.. 완전하지 않더라도 어느정도 틀이 존재하는 상태에서 시작하는 것이 乃 abstract class 클래스이름 { .... } 추상 메서드 [ 메서드 = 선언부 + 구현부 ] 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨둔 것이 추..
[JAVA] 매개변수의 다형성, 객체 배열과 벡터
·
프로그래밍/java
매개변수의 다형성 참조변수의 다형적인 특징은 매개변수에도 적용된다. class Product { int price; int bonusPoint; } class Tv extends Product {} class Computer extends Product {} class Buyer {//Product를 구매하는 구매자 int money = 1000; int bonusPoint = 0; //물건을 구매하는 메서드 } Buyer 클래스에 물건을 구입하는 기능의 메서드를 추가할 것. Tv를 사는 경우, void buy(Tv t) { ... } Computer를 사는 경우, void buy(Computer c) { ... } 이렇게 되면 제품의 종류가 늘어날 때마다 Buyer 클래스에는 새로운 buy 메서드를 추..
[JAVA] 참조변수의 형변환
·
프로그래밍/java
참조변수의 형변환 기본형 변수와 같이, 참조변수 또한 형변환이 가능함. 조건: 서로 상속관계에 있는 클래스 사이에서만 가능하다. - 자손타입 참조변수 → 조상타입 참조변수 - 조상타입 참조변수 → 자손타입 참조변수 class Car { } class FireEngine extends Car { } class Ambulance extends Car { } 위와 같이 클래스가 존재하는 경우, Car ↔ FireEngine Car ↔ Ambulance FireEngine (불가능) Ambulance class Car { } class FireEngine extends Car { } class Ambulance extends Car { } FireEngine f = new FireEngine();// 인스턴스 ..
[JAVA] 다형성(polymorphism)
·
프로그래밍/java
다형성(polymorphism) 여러가지 형태를 가질 수 있는 능력. = 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함. = 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 함. class Tv { boolean power; int channel; void power() { power = !power; } void ChannelUp() { ++channel; } void ChannelDown() { --channel; } } class CaptionTv extends Tv { String text; void caption(String text) { Sustem.out.println(text); } } 지금까지는, 생성된 인스턴스를 다루기 위해 인스턴스 타입과 일치..
[JAVA] 패키지와 import, 제어자, 겟터와 셋터
·
프로그래밍/java
패키지 = 클래스의 묶음 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있다. 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있음. EX) String 클래스의 실제 이름은 java.lang.String이다. = > java.lang 패키지에 속한 String 클래스라는 의미 (lang은 java 패키지의 하위패키지) 패키지 선언문 - 반드시 소스파일에서 주석과 공백을 제외한 첫번째 문장으로서 존재햐아 함. - 하나의 소스파일에 단 한번만 선언 가능 - 해당 소스파일에 포함된 모든 클래스나 인터페이스는 선언된 패키지에 속함. - 소문자 권장 이름없는 패키지(unnamed package) 모든 클래스는 반드시 하나의 패키지에 포함되어야 함. 그런데 패키지 딱히 선언 ..
[JAVA] 오버라이딩(overriding)과 참조변수 super, super() 생성자
·
프로그래밍/java
오버라이딩(overriding) 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것 상속받은 메서드를 그대로 사용하기도 하지만.. 자손 클래스 자신에 맞게 변경해야 하는 경우가 존재함. package ch7; 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; } } public class Ex7_0 { public static void main(String[] args) { Point p1 = new Point..
[JAVA] 상속
·
프로그래밍/java
상속 기존 클래스를 재사용하여 새로운 클래스를 작성하는 것. - 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있음 - 코드를 공통적으로 관리 가능 - 코드 추가 및 변경 용이 class Parent { } // extends 키워드를 사용(조상 클래스를 확장한다는 의미) class Child extends Parent { ... } Parent 클래스와 Child 클래스는 서로 "상속 관계" - Parent: 조상 클래스 - Child: 자손 클래스 자손 클래스는 조상 클래스의 모든 멤버를 상속받는다. 그렇기에 Child 클래스는 Parent 클래스의 멤버를 모두 포함하고 있음. 그러나 자손 클래스인 Child에 새로운 코드가 추가되어도 조상인 Parent 클래스는 아무런 변화 X (물론 Paren..