JAVA 클래스와 메소드2 (상속)
by #독개#JAVA 클래스와 메소드
상속
- 기존 클래스를 재사용하여 새로운 클래스에서 씀
- 자식 클래스는 부모클래스의 모든 것(메소드,변수,생성자)들을 물려받음
- extends 키워드를 사용하여 상속하며 JAVA에선 단일상속만 지원함
다른 클래스를 가져다 쓰는 방법으로는
1. 상속관계
2. 포함관계
두개가 있는데
1. 상속관계(extends)
//부모클래스의 변수
public class Engine {
int speed;
}
//자식클래스
public class Car extends Engine {
String brand;
String color;
}
//사용법
public static void main(String[] args) {
Car a = new Car();
a.speed = 100;
a.brand = "현대";
a.color = "white";
2. 포함관계(클래스 내부에 인스턴트 생성)
ex) System.out.println
//부모클래스의 변수
public class Engine {
int speed;
}
//자식클래스
public class Car {
Engine b = new Engine();
String brand;
String color;
b.speed = 20;
}
//사용법
public static void main(String[] args) {
Car a = new Car();
a.b.speed = 100;
a.brand = "현대";
a.color = "white";
Object 클래스
- 모든 클래스의 최고 부모 클래스
- 모든 클래스는 자동적으로 Object 클래스를 상속 받음
- 모든 클래스는 Object 의 정의된 메소드를 사용 가능함
- 상속 계층도의 최상위에 Object 클래스가 존재함
많지만 대표적인게
.toString()
오버라이딩
- 상속받은 메소드의 내용을 변경하는 것 (부모의 메소드가 바뀌는건 아님)
- 메소드 이름, 매개 변수, 리턴 타입이 같아야함
- 부모클래스의 메소드 접근제어자 보다 높은 범위로 변경 불가능
- 부모클래스의 메소드 보다 많은 수의 예외를 선언할 수 없음
부모클스의
void hello() {
System.out.println("안녕");
}
라는게 싫고 나는 hello 메소드로 "잘자"를 쓰고싶을때 자식 클래스에 똑같은 메소드이름으로 만들어줌
자식클래스에
void hello() {
System.out.println("잘자");
}
이게 말이 뭐 오버라이딩 이렇게 어렵긴한데 그냥 자식클래스랑 부모클래스랑 같은
매소드(메소드 이름, 매개 변수, 리턴값이 같은)가 있으면 자식클래스꺼를 쓰는거다.
super
this : 자기클래스의미
super : 부모클래스 의미
super(); 부모클래스의 기본생성자 (자식을 인스턴스화 하면 자동으로 부모클래스의 생성자는 호출이된다.
그럼 자동으로 시작시 호출되는데 super(); 언제쓰느냐?
부모클래스의 생성자가 많은거지 오버로딩 되있는 상태일때 자식이 인스턴스화 될때 어떤 생성자를 가져올지
지정해줄수있지 super(1,2); 이런식으로
모든 클래스의 생성자는 1개만 불러올수 있으므로 자식1개 부모1개 불러올수 있다.
super(1,2); 이걸 임의로 불러오면 super(); 기본생성자는 실행이안됨
생성자 호출은 클래스 첫라인에 와야한다! 다른 메소드 뒤에 적게되면 오류남
Package 와 Import
패키지
- 서로 관련된 클래스와 인터페이스의 묶음
- 패키지는 폴더 (클래스는 파일 .class)
- .으로 구분한다 ex) 패키지명: naver.co.kr 이면 naver\co\kr\ 안에 class, interface 등등이 들어있는
Tip) 1개의 클래스파일에 여러개의 클래스를 작성할 수 있다. 그러나 public calss는 하나의 파일에 하나만 허용한다
(무조건 한개클래스파일에 한개의 클래스쓰자 프로들도 이렇게쓴다. 이게좋다)
Import
다른 패키지에 든 클래스파일을 쓸라고하면 불러와야한다.
Import a.b.String (a\b\String(클래스파일)) Java.lang패키지는 import하지 않고 사용가능
- 패키지문과 클래스 선언문 사이에 선언
- 모든클래스를 사용할수 있게 선언할수 있다 (ex : Import a.b.* //a.b패키지에 들어있는 모든클래스파일 가져옴)
접근제어자
- 클래스, 맴버 변수, 메소드, 생성자에 사용가능
- 생성자에 접근 제어를 사용할시 인스턴스 생성을 제한할수 있음
Public |
접근 제한이 전혀 없음 (그냥 다~~써라) |
default (아무것도 지정 x때) |
같은 패키지에서만 접근이 가능함 |
private |
같은 클래스에서만 접근이 가능함 |
protected |
같은 패키지, 상속 받은 자식클래스 에서만 접근가능 |
유틸리티 기능 메소드로 활용 하는것들은 이방식을씀
1. 생성자에 private 접근 제어자를 사용 (인스턴스화 할수 없음)
2. static 으로 클래스 메소드를 선언 (인스턴스화 안해도 사용할수 있음)
public class Test1 {
private Test1( ) { } // Test1 test = new Test1( ); 이거 에러나게 함
static void t1( ) { }
}
대표적으로
Math - 수학계산
Math.min(100 , 200); //100과 200중 작은수를 반환해줌
Math.max(100, 200); //100과 200중 큰수를 반환해줌
Math.random( ); //0.0 ~ 0.9999999사이의 랜덤한 값 반환 // int r = (int) (Math.random( ) * 100) 2자리랜덤값
Random - 랜덤관련
Random r = new Random( );
Systme.out.println( r.nextBoolean( ) ); // Ture or False 중랜덤
Systme.out.println( r.nextInt( ) ); // 정수중 랜덤
Systme.out.println( r.nextInt( 50 ) ); // 0~49 중랜덤 r.nextint(50) + 1 : 1~50중랜덤
Systme.out.println( r.Float( ) );
Systme.out.println( r.Double( ) );
LocalDate - 날짜와 시간
이것은 그 컴퓨터의 시간을 가져오는거임
(그래서 예전에 컴퓨터시간 바꾸면 다시 허가받아 쓸수있는 형식이 가능한게 이렇게 로칼시간을 써서 그런듯)
LocalDate : 날짜
LocalTime : 시간
LocalDateTime : 날짜와 시간
public static void main(String[] args) {
LocalDate date = LocalDate.now( );
LocalDate date2 = LocalDate.of(2020, 5 ,25);
System.out println(date);
System.out println(date2);
System.out.println(date.getYear());
System.out.println(date.getMonthValue());
System.out.println(date.getDayOfMonth());
이것은 무엇이냐? 인스턴스화도 아니고!! LocalDate date = LocalDate.now(); 우선 now라는건 LocalDate클래스의 클래스 메소드(static)라 그냥 LocalDate.now(); 이렇게 사용이가능하다. 그런데 now() 라는 메소드의 반환 리턴값을 보면 Object로 되어있다. 자료형중에는 int,String,Boolean등등 이 있지만 Object(객체)도 있다. 그래서 Object데이터형으로 date를 선언해준 것이다. now()메소드가 Object로 리턴을 받으니 우리는 그 값을 담으려면 이 Object 자료형으로 선언을 해줘야지 |
Getter
Setter
전부다 Private변수를 써두고 이게터와 세터로 받고 설정하고 할수있게 하는 방법이라는데
이건 좀검색해서 다시적자
'🔥 프로그래밍 학습 > JAVA' 카테고리의 다른 글
추상화 클래스 , 인터페이스 (0) | 2020.05.25 |
---|---|
자바 분석할것2 (0) | 2020.05.25 |
로또번호 6개 다른값뽑기 (0) | 2020.05.22 |
클래스,생성자,인스턴스맴버,정적맴버,final,상수 (0) | 2020.05.21 |
JAVA 기초 (0) | 2020.05.21 |
블로그의 정보
독한 개발자
#독개#