중요한 것만 일단 정리
1. 변수 타입
1) char은 문자 하나 '' 작은 따옴표 안에 작성 -> char c = 'a';
2) long 형은 큰 정수를 담을 때 , -> long L = 34563425l; => 맨 끝에 l 이나 L 을 반드시 작성해야함
3) float 타입 -> float f = 3.14f => 뒤에 f 함께 작성
2. 변수 타입 변환
1) int x=3;
double y = 3,14;
-> double y = x => 아무문제 없음 , x가 double 형으로 변환
-> int x = y => 오류남 , 명시적으로 형변환 해주어야함. /
-> 수정 : int x = (int)y;
3. 연산자
1) int i = 2;
int i2 = ++i; -> i2 = 3 -> 2+1
2) int t = 3;
int t2 = t++; -> t2 = 3 , t = 4
왜 ? => t를 먼저 t2에 대입 후 t 를 1 증가함
4. 연산자 우선순위
1) int i=5;
System.out. println(i++ - 5);
-> i-5 먼저 수행 후 i++ 수행
-> 후위 연산자는 기본 연산
(12/27)
5. 메소드 오버로딩
- 매개변수의 타입과 개수가 다르면 오버로딩 가능
(단, 매개변수의 이름은 중요하지 않다)
6. 생성자 오버로딩
public class Car {
string name;
int num;
public Car(int num){
this.num=num;
}
public Car(string name, int num){
this.name= name;
this.num=num;
}
//기본 생성자 , this()로 자신의 생성자 호출
public Car(){
this("이름없음", 0); // 두번째 생성자로 가서 출력
}
7. 패키지
- 패키지가 있는 클래스 사용할 때는 import 사용
8. 상속
- extends
- 상속받은 클래스의 메서드를 자식 클래스에서 사용할 수 있음.
- 반대로 부모 클래스에서는 자식 클래스의 메서드를 사용할 수 없음.
9. 접근 제한자
- 캡슐화 : 관련된 것들을 모아서 가지고 있음
- public
- protected : 같은 패키지에 있는 것들만, 다른 패키지라도 상속을 받은 경우 접근을 허용함
- pritvate : 자기 자신만 -> 기본 접근 지정자
10. 추상 클래스
예)
*Bird.java
public abstract class Bird{
public abstract void sing(); // 어떻게 울 것인가 미지수 , 중괄호 없음
// 일반 메서드도 구현 가능
}
-> 추상 메서드가 하나라도 존재하는 클래스는 추상 클래스
Duck.java
public class Duck extends Bird{
public void sing() {
}
}
DuckExam.java
public class DuckExam {
public static void main(String[] args) {
Duck duck = new Duck();
duck.sing();
Bird b = new Bird(); //오류
}
}
Bird b = new Bird(); => 오류나는 이유
-> 추상 클래스는 부모로의 역할은 가능하나, 객체 생성은 불가
11. super 과 부모 생성자
Car.java
public class Car {
public Car(String name) {
System.out.println("c의 생성자");
}
}
Truck.java
public class Truck extends Car {
public Truck() {
System.out.println("t기본 생성자");
}
}
TruckExam.java
public class TruckExam {
public static void main(String[] args) {
Truck t = new Truck();
}
}
-> 실행 결과
c의 기본 생성자
t 의 기본 생성자
순서대로 출력됨
=> why? : Truck의 객체를 생성하면 Truck 의 생성자가 호출이 되고
부모 클래스인 Car의 생성자가 자동으로 호출되면서 부모 객체를 초기화 하게 된다.
*super()
- 부모의 생성자 호출 시 부모 객체를 나타내는 super 키워드 사용
public class Truck extends Car {
public Truck() {
super("소방차"); // 부모의 생성자 호출
System.out.println("t기본 생성자");
}
}
!!! 나를 가리키는 키워드는 this
!!! 부모를 가리키는 키워드는 super
만약 super 가 없고,
public Car(String name){}
매개변수가 있는 생성자라면, 오류 발생
-> 자식의 생성자가 생성되기 전에는 부모의 생성자가 먼저 생성되어야하는데
부모의 생성자를 내가 호출하지 않으면 컴파일러는 기본 생성자만 호출함.
-> 근데, 부모의 클래스에는 기본 생성자가 없음
-> 직접 생성자를 호출해주어야함
-> super("소방차") => 오류 안 남
12. 오버라이딩
- 부모 클래스의 메소드를 자식 클래스에서 재정의하여 사용하는 것
public class Car {
// public Car() {
// System.out.println("c의 생성자");
// }
public void run() {
System.out.println("달리다");
}
}
public class Bus extends Car {
public void run() {
super.run();
System.out.println("빵");
}
}
public class BusExam {
public static void main(String[] args) {
Bus bus = new Bus();
bus.run();
}
}
자식 클래스에서 Car 클래스의 메서드인 run 을 오버라이딩 하고 있음
출력 결과는 자식클래스의 run 메서드가 실행됨
-> Car 클래스의 run 메서드를 사용하고 싶을 때 super.run(); 으로 사용하면 된다.
13. 클래스 형변환
- 부모타입으로 자식 가리킬 수 있으나, 부모가 가지고 있는 내용만 사용 가능하다.
=> Car c = new Bus(); -> Bus 객체가 만들어 진 것이기 때문
c.run() : 아무 문제없음
c.자식 클래스 메서드 -> 오류
- 객체는 부모가 자식보다 조금 더 큰 그릇이라고 기본적으로 생각
=> Bus b = (Bus)c; -> 부모 객체를 자식 객체로 형 변환
c.run();
c.자식 클래스 메서드() => 둥 다 문제없이 가능,
=> 실제 생성됐을 때 버스였기 때문에 버스로 타입을 바꾸는 것이 가능한 것임
(1/4)
'자바' 카테고리의 다른 글
| 코자개 - Hash (1) | 2025.04.11 |
|---|---|
| 자바 정처기 실기 대비 (1) | 2025.04.07 |
| 코자개1. [ ==와 equals() ] (0) | 2025.04.03 |
| java 복습 3 (0) | 2024.01.14 |
| java 복습 2 (0) | 2024.01.14 |