목록프로그래밍/java (49)
쌓고 쌓다
인터페이스(interface) 인터페이스는 interface 키워드를 사용하여 일종의 규격을 정의하는 것이다. interface Animal { public static final int age = 999; // 상수 필드, public static final 생략 가능 public abstract void Sound(); // 추상 메소드, public abstract 생략 가능 public default void Print() // default 메소드, public 생략 가능 { System.out.println("default 메소드"); } } 인터페이스의 구성 멤버 변수(필드)는 만들 수 없다. default, private, static 메소드들은 모두 인터페이스에 코드가 작성되어 있어야 한..
추상 메소드 추상 메소드는 선언은 되어 있으니 코드가 구현되어 있지 않는 껍데기만 있는 메소드이다. 상속에서 슈퍼 클래스로 사용되며 추상 메소드를 작성하기 위해 abstract 키워드를 사용한다. public abstract String getName(); // 추상 메소드 public abstract setName(String str); // 추상 메소드 public abstract String fail() // 컴파일 에러 발생 ( 코드 작성이 이루어 지면 안됨 ) { return "추상 클래스 실패"; } 추상 클래스가 되는 방법 1. 추상 메소드를 포함하는 클래스 abstract class Person{ // 추상 클래스 선언 abstract public void Speak(); // 추상 메소드..
메소드 오버라이딩 슈퍼 클래스에 작성된 메소드와 동일하게 똑같이 서브 클래스에 재작성하는 것이다. 이는 슈퍼 클래스의 메소드를 무시하고 서브 클래스에 오버라이딩 된 메소드를 실행할 수 있게 해 준다. 예시 class Person { void Speak() { System.out.println("사람입니다."); } } class Student extends Person { void Speak() // Student에 오버 라이딩 { System.out.println("학생입니다."); } } Person 클래스의 Speak는 사람입니다. 라고 출력을 Student 클래스의 Speak는 학생입니다.라고 출력을 하는 메소드를 작성했습니다. Person person = new Person(); person.S..
업 캐스팅 class Person { String name; int age; } class Student extends Person { String grade; } public class Main{ public static void main(String[] args) { Person person; Student student = new Student(); person = student; // 업 캐스팅 } } 서브 클래스(자식)는 슈퍼 클래스(부모)의 모든 멤버를 가지기 때문에, 서브 클래스의 객체를 슈퍼클래스의 객체로 취급이 가능하다. 즉, 업 캐스팅은 슈퍼 클래스의 레퍼런스로 서브 클래스의 객체를 가리키게 하는 것이다. 하지만, 업 캐스팅한 레퍼런스로 모든 멤버에 접근은 불가능하고 슈퍼 클래스의 멤버..
슈퍼 클래스와 서브 클래스의 생성자 실행 순서 class A { A() { System.out.println("A 생성자 실행"); } } class B extends A { B() { System.out.println("B 생성자 실행"); } } class C extends B { C() { System.out.println("C 생성자 실행"); } } public class Main{ public static void main(String[] args) { C c = new C(); } } 실행 결과 C는 B를 상속받고, B는 A를 상속받는 구조이다. 여기서 C 클래스의 객체를 생성하면 A-B-C순서로 생성자가 실행 된다. 즉, 슈퍼 클래스의 생성자를 먼저 실행한다. 그 후 서브 클래스의 생성자를..
final 키워드는 3가지로 사용된다. 1. final 클래스 final class finalClass{ } class subClass extends finalClass // 컴파일 에러 { } 클래스 앞에 final 키워드를 사용할 경우 그 클래스는 상속 받아 사용할 수 게 된다. 즉, final 클래스는 상속 받을수 없게 된다. 2. final 함수(메소드) class superClass{ public final int sum(int a,int b) { return a+b; } } class subClass extends superClass{ public int sum(int a,int b) // 컴파일 에러 { return a+b+10; } } 함수에다 final 키워드를 사용한다면 그 함수는 오버..
static과 non-static의 이해 우리 사람들은 태어나면 눈을 가지게 됩니다 이것은 사람마다 개별적인 소유입니다. 눈은 사람이 없이 존재할 수 없습니다. 사람이 죽으면 눈도 없어지죠. 사람의 탄생과 함께 존재하고 소멸과 함께 없어집니다. 하지만, 눈은 사람마다 있지만 다 다르고 공유하질 않습니다. 공기는 우리가 태어나기 전이나 죽어도 존재합니다. 모든 사람들이 공유하며 사용하죠 이것이 눈과의 차이점입니다. 눈은 non-static, 공기는 static 멤버라고 생각할 수 있습니다. static 멤버 선언 class Sample{ int A; // non-static 변수 void g() // non-static 함수 { A=10; } static int B; // static 변수 static v..
클래스의 접근 지정 public class Person{ } 이 Person 클래스는 어떤 패키지에 있든 상관 없이 Person 객체를 생성하든지 사용이 가능하다. 2. 디폴트 클래스(접근 지정자 생략) class Person{ } 위와 같이 생략을 한 경우, 같은 패키지 내의 클래스들만 접근이 가능하다. 멤버(함수,변수) 접근 지정 private 디폴트 접근 지정 protected public 같은 패키지의 클래스 X O O O 다른 패키지의 클래스 X X X O 접근 가능 영역 클래스 내 동일 패키지 내 동일 패키지와 자식 클래스 모든 클래스