From 9037fb958d890995835e86328b7f1a51be0825a7 Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Mon, 20 Feb 2023 19:30:22 +0900 Subject: [PATCH 1/9] =?UTF-8?q?=EA=B8=B0=EB=B3=B8=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=9E=90=20=EC=9E=90=EB=8F=99=20=ED=98=B8=EC=B6=9C=20=EB=B0=8F?= =?UTF-8?q?=20=EB=B6=80=EB=AA=A8=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20?= =?UTF-8?q?=EC=9E=88=EB=8A=94=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=9E=90?= =?UTF-8?q?=EC=8B=9D=EC=9D=B4=20=EC=82=AC=EC=9A=A9=ED=95=A0=20=EC=88=98=20?= =?UTF-8?q?=EC=9E=88=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Parant 클래스를 호출하지 않았는데도 부모 클래스의 기본 생성자가 호출 된다. - 자식 클래스에 구현하지 않았는데도 부모 클래스에 있는 printName() 메소드를 자식 클래스에서 사용할 수 있다. > 출력 결과 Parent Constructor Child Constructor Parent printName() --- practice/extends1/Child.java | 7 +++++++ practice/extends1/Parent.java | 11 +++++++++++ practice/extends1/RunExtends.java | 8 ++++++++ 3 files changed, 26 insertions(+) create mode 100644 practice/extends1/Child.java create mode 100644 practice/extends1/Parent.java create mode 100644 practice/extends1/RunExtends.java diff --git a/practice/extends1/Child.java b/practice/extends1/Child.java new file mode 100644 index 000000000..10e6d2ee3 --- /dev/null +++ b/practice/extends1/Child.java @@ -0,0 +1,7 @@ +package extends1; + +public class Child extends Parent { + public Child() { + System.out.println("Child Constructor"); + } +} diff --git a/practice/extends1/Parent.java b/practice/extends1/Parent.java new file mode 100644 index 000000000..f778f3d1b --- /dev/null +++ b/practice/extends1/Parent.java @@ -0,0 +1,11 @@ +package extends1; + +public class Parent { + public Parent() { + System.out.println("Parent Constructor"); + } + + public void printName() { + System.out.println("Parent printName()"); + } +} diff --git a/practice/extends1/RunExtends.java b/practice/extends1/RunExtends.java new file mode 100644 index 000000000..aaac1f53b --- /dev/null +++ b/practice/extends1/RunExtends.java @@ -0,0 +1,8 @@ +package extends1; + +public class RunExtends { + public static void main(String[] args) { + Child child = new Child(); + child.printName(); + } +} From 5d47349b51eb1a05538539e2666a25a1dd6cc160 Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Mon, 20 Feb 2023 19:40:51 +0900 Subject: [PATCH 2/9] =?UTF-8?q?public,=20protected=20=EB=A1=9C=20=EC=84=A0?= =?UTF-8?q?=EC=96=B8=EB=90=9C=20=EB=A9=94=EC=86=8C=EB=93=9C=EB=A7=8C=20?= =?UTF-8?q?=EC=9E=90=EC=8B=9D=20=ED=81=B4=EB=9E=98=EC=8A=A4=EA=B0=80=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=A0=20=EC=88=98=20=EC=9E=88=EA=B3=A0,?= =?UTF-8?q?=20private=20=EB=A1=9C=20=EC=84=A0=EC=96=B8=EB=90=9C=20?= =?UTF-8?q?=EA=B1=B4=20=EC=9E=90=EC=8B=9D=EB=8F=84=20=EB=AA=BB=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=A8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > 출력 결과 Parent Constructor Child Constructor Parent printName() Parent printProtectedName() --- practice/extends1/Child.java | 2 ++ practice/extends1/Parent.java | 8 ++++++++ practice/extends1/RunExtends.java | 2 ++ 3 files changed, 12 insertions(+) diff --git a/practice/extends1/Child.java b/practice/extends1/Child.java index 10e6d2ee3..246074722 100644 --- a/practice/extends1/Child.java +++ b/practice/extends1/Child.java @@ -4,4 +4,6 @@ public class Child extends Parent { public Child() { System.out.println("Child Constructor"); } + + } diff --git a/practice/extends1/Parent.java b/practice/extends1/Parent.java index f778f3d1b..05afb8a51 100644 --- a/practice/extends1/Parent.java +++ b/practice/extends1/Parent.java @@ -8,4 +8,12 @@ public Parent() { public void printName() { System.out.println("Parent printName()"); } + + private void printPrivateName() { + System.out.println("Parent printPrivateName()"); + } + + protected void printProtectedName() { + System.out.println("Parent printProtectedName()"); + } } diff --git a/practice/extends1/RunExtends.java b/practice/extends1/RunExtends.java index aaac1f53b..133257376 100644 --- a/practice/extends1/RunExtends.java +++ b/practice/extends1/RunExtends.java @@ -4,5 +4,7 @@ public class RunExtends { public static void main(String[] args) { Child child = new Child(); child.printName(); +// child.printPrivateName(); 불가능! + child.printProtectedName(); } } From e429058a5426cd4e7c504637686e6e5f41a8cdb5 Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Mon, 20 Feb 2023 19:55:25 +0900 Subject: [PATCH 3/9] =?UTF-8?q?=EB=B6=80=EB=AA=A8=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=97=90=20=EB=A7=A4=EA=B0=9C=20=EB=B3=80=EC=88=98?= =?UTF-8?q?=EA=B0=80=20=EC=9E=88=EB=8A=94=20=EC=83=9D=EC=84=B1=EC=9E=90?= =?UTF-8?q?=EB=A7=8C=20=EC=9E=88=EC=9D=84=20=EA=B2=BD=EC=9A=B0,=20super?= =?UTF-8?q?=EB=A5=BC=20=EC=9D=B4=EC=9A=A9=ED=95=B4=EC=84=9C=20=EB=B6=80?= =?UTF-8?q?=EB=AA=A8=20=EC=83=9D=EC=84=B1=EC=9E=90=EB=A5=BC=20=EA=BC=AD=20?= =?UTF-8?q?=ED=98=B8=EC=B6=9C=ED=95=B4=EC=A4=98=EC=95=BC=ED=95=9C=EB=8B=A4?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- practice/extends1/ChildArg.java | 9 +++++++++ practice/extends1/ParentArg.java | 12 ++++++++++++ practice/extends1/RunExtends.java | 14 ++++++++++---- 3 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 practice/extends1/ChildArg.java create mode 100644 practice/extends1/ParentArg.java diff --git a/practice/extends1/ChildArg.java b/practice/extends1/ChildArg.java new file mode 100644 index 000000000..4af26ac66 --- /dev/null +++ b/practice/extends1/ChildArg.java @@ -0,0 +1,9 @@ +package extends1; + +public class ChildArg extends ParentArg { + public ChildArg() { + super("ChildArgName ~~~ "); + System.out.println("Child Constructor"); + } + +} diff --git a/practice/extends1/ParentArg.java b/practice/extends1/ParentArg.java new file mode 100644 index 000000000..6439b7cd2 --- /dev/null +++ b/practice/extends1/ParentArg.java @@ -0,0 +1,12 @@ +package extends1; + +public class ParentArg { + + public ParentArg(String name) { + System.out.println("ParentArg("+name+") Constructor"); + } + + public void printName() { + System.out.println("ParentArg printName()"); + } +} diff --git a/practice/extends1/RunExtends.java b/practice/extends1/RunExtends.java index 133257376..2d1941cb1 100644 --- a/practice/extends1/RunExtends.java +++ b/practice/extends1/RunExtends.java @@ -2,9 +2,15 @@ public class RunExtends { public static void main(String[] args) { - Child child = new Child(); - child.printName(); -// child.printPrivateName(); 불가능! - child.printProtectedName(); + // 1. 매개변수가 없는 경우 +// Child child = new Child(); +// child.printName(); +//// child.printPrivateName(); 불가능! +// child.printProtectedName(); + + // 2. 매개변수가 있는 경우 + ChildArg childArg = new ChildArg(); + childArg.printName(); + } } From aa42a43b79d4edf7126c933e7fb0f6248a5d3ba1 Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Mon, 20 Feb 2023 19:58:02 +0900 Subject: [PATCH 4/9] =?UTF-8?q?=EC=9E=90=EC=8B=9D=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=97=90=EC=84=9C=20=EB=B6=80=EB=AA=A8=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=A5=BC=20Overriding=20=ED=95=98=EB=A9=B4,=20=EC=9E=90?= =?UTF-8?q?=EC=8B=9D=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=EB=90=9C=20=EB=A9=94=EC=86=8C=EB=93=9C=EA=B0=80=20?= =?UTF-8?q?=ED=98=B8=EC=B6=9C=EB=90=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > 출력 결과 [Overriding 전] ParentArg(ChildArgName ~~~ ) Constructor Child Constructor ParentArg printName() [Overriding 후] ParentArg(ChildArgName ~~~ ) Constructor Child Constructor ChildArg printName() Overriding --- practice/extends1/ChildArg.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/practice/extends1/ChildArg.java b/practice/extends1/ChildArg.java index 4af26ac66..b7448489a 100644 --- a/practice/extends1/ChildArg.java +++ b/practice/extends1/ChildArg.java @@ -6,4 +6,8 @@ public ChildArg() { System.out.println("Child Constructor"); } + @Override + public void printName() { + System.out.println("ChildArg printName() Overriding"); + } } From aa7861f3ceb1b0859e7187eee0235cae079cb2af Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Mon, 20 Feb 2023 23:52:20 +0900 Subject: [PATCH 5/9] =?UTF-8?q?=EC=86=90=EC=9E=90=EC=9D=98=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=EC=97=90=EB=8F=84=20Parent=EC=9D=98=20protected=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=A0=91=EA=B7=BC=20=EA=B0=80?= =?UTF-8?q?=EB=8A=A5=ED=95=98=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- practice/extends1/GrandChild.java | 11 +++++++++++ practice/extends1/RunExtends.java | 3 +++ 2 files changed, 14 insertions(+) create mode 100644 practice/extends1/GrandChild.java diff --git a/practice/extends1/GrandChild.java b/practice/extends1/GrandChild.java new file mode 100644 index 000000000..e3e9384c4 --- /dev/null +++ b/practice/extends1/GrandChild.java @@ -0,0 +1,11 @@ +package extends1; + +public class GrandChild extends Child { + public GrandChild() { + System.out.println("GrandChild Constructor"); + } + + public void print() { + System.out.println("GrandChild!!!!!"); + } +} diff --git a/practice/extends1/RunExtends.java b/practice/extends1/RunExtends.java index 2d1941cb1..9b8a3562f 100644 --- a/practice/extends1/RunExtends.java +++ b/practice/extends1/RunExtends.java @@ -12,5 +12,8 @@ public static void main(String[] args) { ChildArg childArg = new ChildArg(); childArg.printName(); + // 3. 손자의 경우 + GrandChild grandChild = new GrandChild(); + grandChild.printProtectedName(); } } From 23851c02a54d6a3c0cc91b71feae735755fe3802 Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Tue, 21 Feb 2023 00:06:58 +0900 Subject: [PATCH 6/9] =?UTF-8?q?protected=EB=A1=9C=20=EC=84=A0=EC=96=B8?= =?UTF-8?q?=EB=90=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=8A=94=20=EC=83=81?= =?UTF-8?q?=EC=86=8D=20=EA=B5=AC=EC=A1=B0=EA=B0=80=20=EC=95=84=EB=8B=8C=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=EC=84=9C=EB=8A=94=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=20=EB=B6=88=EA=B0=80=EB=8A=A5=ED=95=98?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- practice/extends1/Friend.java | 7 +++++++ practice/extends1/RunExtends.java | 4 ++++ 2 files changed, 11 insertions(+) create mode 100644 practice/extends1/Friend.java diff --git a/practice/extends1/Friend.java b/practice/extends1/Friend.java new file mode 100644 index 000000000..10e284e7c --- /dev/null +++ b/practice/extends1/Friend.java @@ -0,0 +1,7 @@ +package extends1; + +public class Friend { + public Friend() { + System.out.println("Friend Constructor"); + } +} diff --git a/practice/extends1/RunExtends.java b/practice/extends1/RunExtends.java index 9b8a3562f..068ede503 100644 --- a/practice/extends1/RunExtends.java +++ b/practice/extends1/RunExtends.java @@ -15,5 +15,9 @@ public static void main(String[] args) { // 3. 손자의 경우 GrandChild grandChild = new GrandChild(); grandChild.printProtectedName(); + + // 4. 상속 구조가 아닌 경우 + Friend friend = new Friend(); +// friend.printProtectedName(); 불가능! } } From ff04ff218cffdeed30b140c9f4e1e5a5f0c3eaab Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Tue, 21 Feb 2023 00:25:59 +0900 Subject: [PATCH 7/9] =?UTF-8?q?=EB=B6=80=EB=AA=A8=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EB=B3=B4=EB=8B=A4=20=EC=A0=91=EA=B7=BC=20=EC=A0=9C?= =?UTF-8?q?=EC=96=B4=EC=9E=90=EA=B0=80=20=EC=B6=95=EC=86=8C=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EA=B2=83=EC=9D=80=20=EB=AC=B8=EC=A0=9C=EA=B0=80=20?= =?UTF-8?q?=EB=90=9C=EB=8B=A4.=20protected=20->=20pacakge-private=EB=A1=9C?= =?UTF-8?q?=20=EC=B6=95=EC=86=8C=20=EB=90=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- practice/extends1/Child.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/practice/extends1/Child.java b/practice/extends1/Child.java index 246074722..a0ee972fa 100644 --- a/practice/extends1/Child.java +++ b/practice/extends1/Child.java @@ -4,6 +4,9 @@ public class Child extends Parent { public Child() { System.out.println("Child Constructor"); } - - + + @Override + void printProtectedName() { // attempting to assign weaker access privileges ('package-private'); was 'protected' 라고 하면서 에러 남! + System.out.println("Parent printProtectedName()"); + } } From 071717ed6c11fecb2f1b6691e32460bb358eb5a6 Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Tue, 21 Feb 2023 00:27:07 +0900 Subject: [PATCH 8/9] =?UTF-8?q?=EB=B6=80=EB=AA=A8=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EB=B3=B4=EB=8B=A4=20=EC=A0=91=EA=B7=BC=20=EC=A0=9C?= =?UTF-8?q?=EC=96=B4=EC=9E=90=EA=B0=80=20=EB=8D=94=20=ED=99=95=EB=8C=80?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EA=B2=83=EC=9D=80=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EB=90=98=EC=A7=80=20=EC=95=8A=EB=8A=94=EB=8B=A4.=20protected?= =?UTF-8?q?=20->=20public?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- practice/extends1/Child.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/practice/extends1/Child.java b/practice/extends1/Child.java index a0ee972fa..dd71b2ac2 100644 --- a/practice/extends1/Child.java +++ b/practice/extends1/Child.java @@ -4,9 +4,9 @@ public class Child extends Parent { public Child() { System.out.println("Child Constructor"); } - + @Override - void printProtectedName() { // attempting to assign weaker access privileges ('package-private'); was 'protected' 라고 하면서 에러 남! + public void printProtectedName() { System.out.println("Parent printProtectedName()"); } } From ef8320964d4e0a96201525159e5849d42c8c96f2 Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Tue, 21 Feb 2023 00:31:13 +0900 Subject: [PATCH 9/9] =?UTF-8?q?=EB=B6=80=EB=AA=A8=EB=8A=94=20=EC=9E=90?= =?UTF-8?q?=EC=8B=9D=EC=9D=84=20=EB=8B=B4=EC=9D=84=20=EC=88=98=20=EC=9E=88?= =?UTF-8?q?=EC=9C=BC=EB=82=98,=20=EC=9E=90=EC=8B=9D=EC=9D=80=20=EB=B6=80?= =?UTF-8?q?=EB=AA=A8=EB=A5=BC=20=EB=8B=B4=EC=A7=80=20=EB=AA=BB=ED=95=9C?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 왜냐하면, 자식에게만 존재하는 변수나 메서드가 있는데, 이를 부모로부터 참조할 수 없으므로, --- practice/extends1/RunExtends.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/practice/extends1/RunExtends.java b/practice/extends1/RunExtends.java index 068ede503..a56108167 100644 --- a/practice/extends1/RunExtends.java +++ b/practice/extends1/RunExtends.java @@ -3,21 +3,28 @@ public class RunExtends { public static void main(String[] args) { // 1. 매개변수가 없는 경우 -// Child child = new Child(); + Child child = new Child(); // child.printName(); //// child.printPrivateName(); 불가능! -// child.printProtectedName(); + child.printProtectedName(); // 2. 매개변수가 있는 경우 ChildArg childArg = new ChildArg(); childArg.printName(); - // 3. 손자의 경우 - GrandChild grandChild = new GrandChild(); - grandChild.printProtectedName(); +// // 3. 손자의 경우 +// GrandChild grandChild = new GrandChild(); +// grandChild.printProtectedName(); // 4. 상속 구조가 아닌 경우 Friend friend = new Friend(); // friend.printProtectedName(); 불가능! + + // 5. 형변환 + // (1) 가능 + Parent parent = new Child(); + + // (2) 불가능 + Child child = new Parent(); } }