과거⚰️
상속 오버라이드 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는 부모
오버라이드 오버로딩 정리