반응형

전체 글 154

[Java] instanceof

/*instanceof 연산자 * - 좌변의 객체(참조변수)가 우변 클래스의 타입인지 판별하는 연산자 * - 판별 결과가 true 이면 형변환이 가능한 관계(업캐스팅 or 다운캐스팅) * 판별 결과가 false 이면 절대로 형변환 불가 * - 우변의 클래스 타입과 같거나 우변 클래스 타입의 자식 타입 모두 가능 * - A is a B = A instanceof B * - 판별 결과를 boolean 타입 변수에 저장하거나 * if문에 판별하는 문장을 직접 사용 가능 * * * if(A instanceof B) { // A 는 참조변수(객체), B 는 클래스명(타입) * // 형변환이 가능한 관계이므로 변환 수행 * } else { * // 절대로 형변환이 불가능한 관계이므로 변환 수행 X..

JAVA 2021.10.31

[Java] 레퍼런스 형변환(Up Casting, Down Casting)

/* * 레퍼런스 형변환 * - 어떤 객체(인스턴스)를 다른 타입으로 변환하는 것 * - 참조형 데이터타입간의 변환 * - 반드시 상속 관계가 전제되어야 함 * (= 상속 관계가 아닌 타입끼리의 형변환은 허용되지 않음 = 오류 발생) * - 슈퍼클래스타입 서브클래스타입 * - 묵시적 형변환(업캐스팅, Up Casting)과 * 명시적 형변환(다운캐스팅, Down Casting)으로 구분 * * 1. 업캐스팅(Up Casting) * - 슈퍼클래스 타입 레퍼런스로 서브클래스 인스턴스를 참조하는 것 * = 서브클래스의 인스턴스를 슈퍼클래스 타입으로 변환하는 것 * - 컴파일러에 의해 자동 형변환이 일어남(= 묵시적 형변환) * = 별도의 형변환 연산자를 사용하지 않고도 변환 가능함(생략 가능) * - 참조 ..

JAVA 2021.10.31

[Java] final 키워드

/* * final 키워드 * - 대상의 변경이 불가능하도록(변경의 최종) 지정 * 1. 변수에 final 이 붙을 경우 * => 변수 값 변경 불가 = 저장되어 있는 값만 사용 가능 * = 상수로 취급됨 * => 일반 변수와 구별하기 위해 이름을 보통 대문자 사용하며, * 단어 사이의 구분은 언더스코어(_) 를 사용함 * ex) MAX_NUM * => 반드시 초기화 필수 * 단, 초기화를 수행하지 않은 상수를 blank final 상수라고 하며 * 생성자를 통해 초기화하면 사용이 가능함 * => 목적 : 객체마다 다른 상수 값을 갖기 위함 * * 2. 메서드에 final 이 붙을 경우 * => 메서드 변경 불가 = 오버라이딩 금지 * 3. 클래스에 final 이 붙을 경우 * => 클래스 변경 불가 =..

JAVA 2021.10.31

[Java] 상속에서의 생성자

/* * * - 생성자는 상속되지 않음 * => 생성자 이름은 자신의 클래스 이름과 동일한데 * 만약, 상속받을 경우 생성자 이름이 부모 클래스 이름이므로 * 생성자 작성 규칙에 위배됨 * - 서브클래스의 인스턴스 생성할 때는, 자동으로 슈퍼클래스의 인스턴스를 * 먼저 생성한 후 서브클래스의 인스턴스가 생성됨 * => 이 때, 서브클래스 생성자에서 슈퍼클래스 기본생성자를 자동 호출 * => 만약, 슈퍼클래스에 파라미터 생성자만 존재할 경우 * 서브클래스 생성자에서 컴파일 에러가 발생하게 된다! * * * - 슈퍼클래스의 생성자를 명시적으로 호출할 때 사용 * => 생성자 this() 와 사용 방법 및 목적은 동일함 * - 기본 문법 : super([데..

JAVA 2021.10.31

[Java] 멤버변수에 대한 오버라이딩,레퍼런스 super

/* * 메서드 오버라이딩 및 멤버변수에 대한 오버라이딩 시 * 슈퍼클래스의 멤버변수와 메서드는 은닉되어 보이지 않게 된다! * => 즉, 서브클래스의 인스턴스를 통해 슈퍼클래스의 멤버에 접근 불가능! * * * - 슈퍼클래스의 멤버에 접근하기 위한 키워드(= 레퍼런스 변수) * - 레퍼런스 this 와 마찬가지로 서브클래스 인스턴스를 생성할 때 생성되며 * 이 때, 자동으로 생성되는 슈퍼클래스의 인스턴스 주소를 저장하는 변수 * - 주로, 오버라이딩에 의해 은닉된 멤버변수 또는 메서드 접근 시 사용 * - 기본 문법 : super.부모의멤버변수 또는 super.부모의메서드() */ public class Ex { public static void main(String[] ar..

JAVA 2021.10.31

[Java] 접근제한자(Access Modifier)

/* * 접근제한자 : 멤버에 대한 접근 범위를 제한자는 키워드 * (좁음) private - default - protected - public (넓음) * 1. public : 모든 패키지의 모든 클래스에서 접근 가능(= 누구나) * 2. protected : 같은 패키지이거나 다른 패키지의 서브클래스에서 접근 가능 * 3. default : 같은 패키지에서만 접근 가능(= 다른 패키지에서 접근 불가) * 4. private : 자신의 클래스에서만 접근 가능(= 다른 클래스에서 접근 불가) */ package access_modifier_p1; public class ParentClass { // 접근제한자에 따른 접근 범위 차이 public int publicVar; protected int pro..

JAVA 2021.10.31

[Java] 메서드 오버라이딩(메서드 재정의)

/* * 메서드 오버라이딩(Method Overriding) = 메서드 재정의 * - 슈퍼클래스로부터 상속받은 메서드를 서브클래스에서 재정의 하는 것 * - 기존 슈퍼클래스의 메서드와 동일하게 생긴 메서드를 정의하게 되므로 * 서브클래스에서는 더 이상 슈퍼클래스의 메서드가 보이지 않음 * => 슈퍼클래스의 메서드를 덮어쓰기 때문에 자신의 메서드만 보이게 됨 * (= 슈퍼클래스의 메서드는 은닉됨) * - 슈퍼클래스의 메서드에 새로운 기능을 추가하는 등 * 기존에 상속된 메서드 내용을 변경하는 경우 사용 * * * 1. 상속 관계 필수 * 2. 메서드 시그니쳐(메서드명, 리턴타입, 파라미터)가 일치해야함 * => 단, 리턴타입은 부모와 같거나 서브클래스 타입으로 변경 가능 * 3. 접..

JAVA 2021.10.30

[Java] 상속 기본 개념 복습

public class Ex { public static void main(String[] args) { //상속 기본 개념 복습 //SpiderMan s = new SpiderMan(); //s.name = "스파이더맨"; // Person 클래스로부터 상속받은 멤버변수 SpiderMan s = new SpiderMan("스파이더맨",16, false, true); s.eat(); // Person 클래스로부터 상속받은 메서드 s.jump(); // Person 클래스로부터 상속받은 메서드 s.fireWeb(); } } class Person { String name; int age; boolean isHungry; public Person() { System.out.println("Person() 생..

JAVA 2021.10.30

[Java] 상속 연습

public class Test2 { public static void main(String[] args) { Manager m = new Manager("홍길동",1000,"개발팀"); System.out.println(m.getManager()); } } /* * 직원(Employee) 클래스 * 멤버변수 * - 직원이름(name, 문자열) * - 연봉(salary, 정수) * 메서드 * - 직원 정보를 문자열로 결합하여 리턴하는 getEmployee() 메서드 정의 * (파라미터 없음, 리턴값 있음) * => 직원이름과 연봉을 문자열로 결합하여 리턴 */ class Employee { String name; int salary; public String getEmployee() { return na..

JAVA 2021.10.30

[Java] 상속에서의 생성자

/* * 상속에서의 생성자 * - 생성자 : 클래스명과 이름이 같고 리턴타입이 없는 메서드의 일종 * - 생성자는 상속되지 않음 * => 상속받을 경우 자신의 클래스 이름과 생성자 이름이 다르기 때문에 * 생성자 정의 규칙을 위반하게 됨 * - 상속 관계에서 인스턴스를 생성할 때 * 서브클래스의 인스턴스가 생성되기 전 슈퍼클래스의 인스턴스를 * 먼저 생성한 후 서브클래스의 인스턴스를 생성함 * => 서브클래스의 생성자가 호출되면 가장 먼저 * 슈퍼클래스의 생성자를 호출하여 슈퍼클래스의 인스턴스를 생성하고 * 그 후에 서브클래스의 인스턴스가 생성되어 생성자 코드가 실행됨 */ public class Ex4 { public static void main(String[] args) { //상속에서의 생성자 M..

JAVA 2021.10.30
반응형