다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 말한다. 오버로딩은 다형성의 좋은 예라고 할 수 있다. class A{ public String x(){return "A 클래스의 x 메소드";} } class B extends A{ public String y(){return "B 클래스의 y 메소드";} } public class PolymorphismDemo1 { public static void main(String[] args) { A obj = new B();// 클래스 B를 인스턴스화 했지만 데이터 타입은 클래스 A System.out.println(obj.x()) // System.out.println(obj.y()); // 오브젝트 안에 클래스 B를 담았..
인터페이스란? 서로 관계가 없는 물체들이 상호 작용을 하기 위해서 사용하는 장치나 시스템을 말한다. 인터페이스는 어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메소드들을 구현해야 한다. (그 인터페이스를 구현한 클래스를 어떻게 조작할 것인가를 규정) 인터페이스와 상속은 다르다. 상속이 상위 클래스의 기능을 하위 클래스가 물려 받는 것이라고 한다면, 인터페이스는 하위 클래스에 특정한 메소드가 반드시 존재하도록 강제한다. 인터페이스는 데이터를 저장할 수 없기 때문에 저장할 인스턴스 및 정적 필드를 선언할 수 없고 대신 상수 필드만 사용 가능하다. 따라서 static final을 생략해도 자동적으로 컴파일 과정에서 붙게 된다. 그리고 메소드는 최종적으로 객체에서 실행..
abstract란 공통되는 특성을 추출한 것이다. 또한 abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사용하도록 강제하는 것을 말한다. 예를 들자면 Animal.class는 새, 곤충, 물고기(실체 클래스)를 상속하는 추상 클래스라는 것이다. 메소드가 하나라도 추상 메소드라면 해당 클래스또한 추상 클래스가 된다. (추상 클래스 안의 메소드가 전부 추상 메소드일 필요는 없다.) 추상 클래스는 실체 클래스의 공통되는 필드와 메소드를 추출해서 만들었기 때문에 객체를 직접 생성하지 못한다. 다시 말해서 추상 클래스는 new 연산자를 통해서 인스턴스를 생성시키지 못한다는 것이다. abstract public class A { public abstract int b(); // 본체({ })가 ..
class A { public String y(){ return "public void y()"; } private String z(){ return "public void z()"; } public String x(){ return z(); // 메소드 x와 메소드 z는 같은 클래스의 소속이기 때문에 // 메소드 x에서 z를 호출 가능하다. } } public class AccessDemo1 { public static void main(String[] args) { A a = new A(); System.out.println(a.y()); // 오류 발생 -> private는 외부 클래스에서 접근 불가능 //System.out.println(a.z()); System.out.println(a.x())..
javac는 소스 코드를 컴파일해서 클래스 파일로 만든다. java -classpath ".:lib" ClasspathDemo2 -classpath 자바를 실행할 때 사용할 클래스들의 위치를 가상머신에게 알려주는 역할 . 현재 디렉터리에서 클래스를 찾는다는 뜻 ; 경로와 경로를 구분해주는 구분자 lib 현재 디렉터리에 없다면 현재 디렉터리의 하위 디렉터리 중 lib에서 클래스를 찾는다는 의미 환경변수를 설정함으로써 실행할 때마다 -classpath를 설정하지 않아도 된다는 장점이 있다. 패키지란 하나의 클래스 안에서 같은 이름의 클래스를 사용하기 위한 방법을 말한다. (디렉토리같은 개념) 만약 corine1 패키지에 A와 B 클래스가 있고, corine2 패키지에 B와 C 클래스가 있다고 하자. cori..
상속이 상위 클래스의 기능을 하위 클래스의 기능을 물려주는 행위라고 한다면 오버라이딩은 자식 클래스에서 상위 클래스의 기능에 새로운 기능을 추가하여 재정의하는 것을 말한다. public class Calculator { int left, right; public Calculator(int left,int right) { this.left = left; this.right = right; } // Calculator의 메소드 void add() { int result1 = left+right; System.out.println("합은 "+result1); } } public class SubstractionableCalculator extends Calculator { public Substractiona..
public 클래스명(매개변수){} -> 객체가 될 때 필드를 초기화 하는 역할 메소드와 다르게 리턴 타입을 가지고 있지 않다. 생성자를 프로그래머가 만들지 않으면 매개변수가 없는 생성자가 컴파일할 때 자동으로 만들어진다. 매개변수가 없는 생성자를 기본생성자라고 한다. 생성자를 하나라도 프로그래머가 만들었다면 기본생성자는 자동으로 만들어지지 않는다. ex) Calculator c1 = new Calculator(); 기본 생성자 this : 객체 자신을 참조하는 키워드 this() : 나의 생성자 public class Car{ String name; int color; public Car(){}// 기본 생성자 puv=blic void Car(){ // this.name = "이름x";13, 14번째 ..
상속이란? 어떤 객체가 있을 때 그 객체(부모 객체)의 필드(변수)와 메소드를 다른 객체(자식 객체)가 물려 받을 수 있는 기능을 상속이라고 한다. public class Calculator { int left, right; void setOprands(int left, int right) { this.left = left; this.right = right; } void add() { int result1 = left+right; System.out.println("합은 "+result1); } void avg() { int result2 = (left+right)/2; System.out.println("평균은 "+result2); } } public class SubstractionableCalcu..