과거⚰️

상속 오버라이드 super 접근제어자

아무루 2020. 12. 25. 11:35
package chap8_day02_상속;

class A {
	int aa;
}

class B extends A {
	int bb;
}

class C {
	A a = new A();
	int cc;
}

public class Day0201_상속 {
	// 상속받는법
	// 1) class B 옆에 extends 부모클래스
	public static void main(String[] args) {
		B b = new B(); // B는 A를 상속받았으므로 aa , bb 둘다 사용가능하다.
		b.aa = 100;
		b.bb = 200;
		// 상속받지않고 상속같은 관계만들기
		// C는 A를 상속받지않았지만 내부에 변수를 따로 만들어서 상속받은것과 같은상황이나 
		// .을 2번 찍어야한다. 
		C c = new C();
		c.cc = 100;
		c.a.aa = 200; // 이와같이 . 을 2번찍어야한다.
	}

}
package chap8_day02_상속;

//Object를 상속을 하던안하던 자동으로 상속된다.
class ExtendsTest1 extends Object{  
	int b;
}

class ExtendsTest2 {
	int a;
}
public class Day0202_상속2 {
	
	public static void main(String[] args) {
		ExtendsTest1 test1 = new ExtendsTest1();
		ExtendsTest2 test2 = new ExtendsTest2();
		// test1. 찍으면 초록색 메서드들이 있다. 
		// test2. 찍으면 초록색 메서드들이 있다. 
		// 만들지도 않았는데 이미 존재하는 메서드 들은 무엇인가?
		// 자바는 어떤 클래스던지 Object 클래스를 자동으로 상속받는다.
		// 초록색불이 들어오는 메서드는 Object클래스 안에 만들어져있는 메서드 들이다. 
		
		//=============== toString ===============
		
		// toString()은 Object 클래스에 만들어져있는 메서드이다. 
		// 원형은 test1.toString() 이지만 편의상 toString() 은 생략할수있다. 
		// toString() 은  메모리 주소를 출력해준다. 
		
		System.out.println(test1.toString());// 둘다 같은 결과가 나온다. 
		System.out.println(test1); // 둘다 같은 결과가 나온다. 
	}
}


package chap8_day02_상속;

class MethodOverloding{
	void test(int a) {};
	void test(int a , int b) {};
	void test(String a) {};
}
class MethodOverride{
	void test() {
		System.out.println("testParent");
	}
	void overridTest() {
		System.out.println("overridTestParent");
	}
}
class Child extends MethodOverride{
	void overridTest() {
		System.out.println("overridTestChild");
	}
}

public class Day0203_매서드오버라이드 {
	public static void main(String[] args) {
		// 1)매서드 오버로딩 , 2)매서드오버라이드 
		
		// 매서드 오버로딩은 메서드 이름을 여러개 사용할 수 있는 기능이다. 
		
		// 메서드 오버라이드는 부모에 있는 메서드를 자식이 같은 이름으로 만들어서 사용하는 것이다. 
		Child c = new Child();
		c.test(); // 당연히 부모의 메서드를 사용할 수 있다.
		c.overridTest(); // 부모의 메서는 실행되지 않고 자식의 메서드가 우선순위를 가져간다.
		
	}
}


package chap8_day02_상속;

class Parent{

	void test() {
		System.out.println("testParent()");
	}
}
class ChildTest extends Parent{

	void test() {
		// 자식의 변수나 메서드가 부모의 변수나 메서드와 이름이 같다면 super로 구분하면된다. 
		super.test(); // 자식 메서드에서 부모의 test를 또 실행시키고싶다면 super를 사용한다.
		System.out.println("testChild()");
	}
}
public class Day0204_Super {
	public static void main(String[] args) {
		ChildTest child = new ChildTest();
		child.test();
		
	}
}


package chap8_day02_상속;


class TestParent{
	 private int a;
	 protected int b;
	 int c;
	 public int d;
}
class TestChild extends TestParent{
	
}
// 접근제어자 종류 
//public    ==> 1) 어디서든 사용가능하다. 
// private   ==> 1) 자신클래스안에서만 사용가능
// protected ==> 1) 패키지가 다르면 자신클래스와 자식클래스에서만 사용가능  2) 패키지가같으면 public과같다. 
// default   ==> 1) 아무것도안쓰면 디폴트 이다.  2) 패키지가 다르면 private 패키지가 같으면 public과같다. 
 
public class Day0205_접근제어자protected {
	public static void main(String[] args) {
		
	}
}

super는 부모

오버라이드 오버로딩 정리