생각정리/항해99
[프로그래밍 기초] Java문법 2일차
생각중임
2023. 8. 15. 22:55
Java문법 종합반 3 주차
클래스
변수, 생성자 메서드로 구성
기본 생성자는 적지 않아도 기본으로 생성되어 있다. ( 생성자를 만들어주면 기본 생성자는 생성되지 않는다.)
public class Car {
public String company; // 자동차 회사
public String model; // 자동차 모델
private String color; // 자동차 색상
public double price; // 자동차 가격
public double speed; // 자동차 속도 , km/h
public char gear; // 기어의 상태, P,R,N,D
public boolean lights; // 자동차 조명의 상태
public Car() {} // 기본 생성자
Public Car(String model) { // this를 이용한 생성자
this(model, "Blue"); // this생성자는 가장먼저 사용해야한다.
}
public Car(String model, String color) {
this.model = model;
this.color = color;
}
public double gasPedal(double kmh) {
this.speed = kmh;
return speed;
}
public void horn() {
System.out.println("빵빵");
}
}
객체의 사용
클래스를 객체로 생성하여 사용한다.
객체는 참조형 변수와 동일하게 배열 또는 컬랙션에 사용가능하다.
객체라는 개념을 잘 이해해야 나중에 헷갈리지 않을 것 같다.
public class Main {
public static void main(String[] args) {
Car[] carArray = new Car[3];
Car car1 = new Car();
car1.changeGear('P');
carArray[0] = car1;
Car car2 = new Car();
car2.changeGear('N');
carArray[1] = car2;
Car car3 = new Car();
car3.changeGear('D');
carArray[2] = car3;
for (Car car : carArray) {
System.out.println("car.gear = " + car.gear);
}
}
}
접근 제어자
클래스, 메서드, 변수등에 사용되는 접근에 대한 제한을 설정할 수 있다.
접근 제어자를 별도로 설정하지 않으면 변수나 메서드는 default 접근 제어자가 자동으로 설정된다.
사용가능한 접근 제어자와 사용가능한 제어자가 따로 있었나? 다른 강의들을 비교해 보면서 다시 확인해 봐야겠다
※추가 - 말하는 문제였다. 그냥 사용가능 제어자는 접근 제어자 + 기타 제어자를 포함해서 같이 보여주면서 말했던 것
// 접근 제어자
// public : 접근 제한이 전혀없음
// protected : 같은 패키지의 클래스 또는 해당 클래스를 상속받은 클래스에서 접근이 가능
// default : 같은 패키지 내에서만 접근이 가능
// private : 해당 클래스 내에서만 접근이 가능
// 사용가능한 접근 제어자
// 클래스 : public, default
// 메서드 & 멤버변수 : public, protected, default, private
// 지역변수 : 없음
// 사용가능한 제어자 (기타제어자 final, static, abstract 포함)
// 클래스 : public, default, final, abstract
// 메서드 : public, protected, default, private, final, abstract, static
// 멤버변수 : public, protected, default, private, final, static
// 지역변수 : final
클래스 상속
java는 다중상속을 허용하지 않는다.
상속은 이제 추상 클래스와 인터페이스에도 사용되므로 개념 정리를 잘해두자.
public class 자식클래스 extends 부모클래스 {
}
public class SportsCar extends Car{
String engine;
public void booster() {
System.out.println("엔진 " + engine + " 부앙~\n");
}
}
추상 클래스
abstract를 사용하여 선언한다.
추상 클래스는 추상 메서드를 포함한다. ( 추상 메서드가 없는 건 상관없다. )
클래스를 잘 활용하기 위해서 잘 알아둬야 한다.
// 추상 클래스 선언
public abstract class 추상클래스명 {
abstract 리턴타입 메서드이름(매개변수, ...);
}
public abstract class Car {
String company; // 자동차 회사
String color; // 자동차 색상
double speed; // 자동차 속도 , km/h
public double gasPedal(double kmh) {
speed = kmh;
return speed;
}
public double brakePedal() {
speed = 0;
return speed;
}
public abstract void horn();
}
// 추상 클래스 상속
public class 클래스명 extends 추상클래스명 {
@Override
public 리턴타입 메서드이름(매개변수, ...) {
// 실행문
}
}
public class ZenesisCar extends Car {
@Override
public void horn() {
System.out.println("Zenesis 빵빵");
}
}
인터페이스
모든 멤버변수는 public static final이다. (생략 가능)
모든 메서드는 public abstract이다. (생략 가능)
인터페이스 간에는 상속(extends)을 하고 클래스에는 구현(implements) 하는 걸 잘 구분해야 된다.
set, list, map 등이 인터페이스로 구현되어 있다.
// 인터페이스 선언
public interface 인터페이스명 {
public static final char A = 'A';
static char B = 'B';
final char C = 'C';
char D = 'D';
void turnOn(); // public abstract void turnOn();
}
// 인터페이스 구현
public class 클래스명 implements 인터페이스명 {
// 추상 메서드 오버라이딩
@Override
public 리턴타입 메서드이름(매개변수, ...) {
// 실행문
}
}
// 인터페이스 상속
public interface 인터페이스명 extends 인터페이스명2, 인터페이스명3... {
// 추상 메서드 오버라이딩
@Override
public 리턴타입 메서드이름(매개변수, ...) {
// 실행문
}
}