독개

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변수를 써두고 이게터와 세터로 받고 설정하고 할수있게 하는 방법이라는데
이건 좀검색해서 다시적자




블로그의 정보

독한 개발자

#독개#

활동하기