1.static vs non static

static 어느 클래스에서도 접근가능하고, 같은 변수를 공유 : 여러번 호출시 값이 누적되어 변경

non-static: 이름이 같더라도 별개의 변수: 여러번 호출시에도 처음 그대로

 

 

2.접근제한자

public:

protected : 다른 패키지 같은 클래스 상속 

default:  같은 패키지 내에서만

private:  같은 클래스내에서만 

 

 

3.상속

A extends B: A클래스는 B클래스를 상속한다. A(자식)이 사용할 수 있는 범위가 넓다

 

Vehicle.java : Vehicle 클래스에는 name 객체변수가 있다. SetName 메소드에는 입력o 출력x(프린트x) 

package com.test04;

public class Vehicle {
	String name;

	public void SetName(String name) {
		this.name = name;
	}

}

Car.java  //웬만하면 클래스이름은 대문자로 하기!! 객체들랑 헷갈려,,

package com.test04;

public class Car extends Vehicle{ //자식클래스 extends 부모클래스
	

}

 

Car라는 클래스가 Vehicle을 상속받음

public class Car extends Vehicle { // 자식클래스 extends 부모클래스
	public static void main(String[] args) {
		Car car = new Car();
		car.SetName("BMW");  //객체.메소드(인수)
		System.out.println(car.name); //print(객체.객체변수)

	}

}

출력값 : BMW

 

public class Car extends Vehicle { // 자식클래스 extends 부모클래스

	public void Drive() { // Drive 메소드 입력x 출력x(프린트만 한다)
		System.out.println(this.name + " vroom vromm-");
	}

	public static void main(String[] args) { // main 메소드
		Car car = new Car();
		car.SetName("BMW");
		System.out.println(car.name); // Vehicle메소드는 프린트함수가 없음
		car.Drive(); // 객체.메소드

	}

}

출력값:

BMW

BMW vroom vroom-

 

Vehicle car=new Car(); //Car의 새로운 객체는, Vehicle 자료형이다.

 

반대는 안된다. Vehicle> Car 이므로, =new 자식클래스가 오른쪽에 위치한것만 가능

 

 

기본적으로 모든 클래스는 Object 클래스를 상속받고 있다.

그래서 아래와 같은 형태도 가능하다.

Object vehicle=new Vehicle();
Object car=new Car();

 

 

4.메소드 오버라이딩

public class Deutsch extends Car { // Vehicle> Car> Deutsch순서로 상속
	public static void main(String[] args) {
		Deutsch deutsch = new Deutsch();
		deutsch.SetName("E_CLASS");// Vehicle의 SetName 메소드
		deutsch.Drive();
	}

}

출력값: E_CLASS vroom vroom-

 

public class Deutsch extends Car { // Vehicle> Car> Deutsch 순서로 상속
	public void Drive() { //Car의 Drive 메소드와 같음
		System.out.println(this.name+" vroom vroom- in Deutsch");
		
	}
	
	public static void main(String[] args) {
		Deutsch deutsch = new Deutsch();
		deutsch.SetName("E_CLASS");// Vehicle의 SetName 메소드
		deutsch.Drive();
	}

}

E_CLASS vroom vroom- in Deutsch

자식클래스의 메소드가 더 높은순위를 가진다. 부모클래스의 메소드를 덮어쓴다. 

 

5.메소드 오버로딩( 변경x 추가o )

같은 클래스에 입력값만추가(자료형 변수);

 

6.다중상속

자바는 다중상속 지원안해.

class C extends A, B { //이런게 안 된단 소리
    public void static main(String[] args) {

 

 

출처:https://wikidocs.net/280

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

'자바' 카테고리의 다른 글

자바3. 생성자, 인터페이스  (0) 2021.06.28
자바1. 자료형, equals vs ==, 클래스, 메소드  (0) 2021.06.26

+ Recent posts