たけいせい
6387 ワード
たけいせい
package com.bit.day08.am;
class Lec06{
int su=1111;
void func(){
System.out.println("부모기능");
}
}
//다형성
public class Ex06 extends Lec06 {
int su=2222;
void func(){
System.out.println("자식기능");
}
public static void main(String[] args) {
Lec06 me1=new Lec06();
me1.func();
System.out.println("-----------------");
Ex06 me2=new Ex06();
me2.func();
System.out.println("-----------------");
Lec06 me3 = new Ex06(); //
me3.func();
}
}
//출력물
/*
부모기능
-----------------
자식기능
-----------------
자식기능
*/
ターゲットの上書き=メソッドメソッドは私が実行しますが、フィールドの値は親タイプなので、親タイプに属します.
package com.bit.day08.am;
class Lec06{
int su=1111;
void func(){
System.out.println("부모기능");
}
}
//다형성
public class Ex06 extends Lec06 {
int su=2222;
void func(){
System.out.println("자식기능");
}
public static void main(String[] args) {
Lec06 me1=new Lec06();
me1.func();
System.out.println(me1.su);
System.out.println("-----------------");
Ex06 me2=new Ex06();
me2.func();
System.out.println(me2.su);
System.out.println("-----------------");
Lec06 me3 = new Ex06();
me3.func();
System.out.println(me3.su);
//필드 접근시에는 부모타입이므로 부모의 값 1111 나옴(오버라이드가 안되니까)
}
}
サブ機能package com.bit.day08.am;
class Lec06{
int su=1111;
void func(){
System.out.println("부모기능");
}
}
//다형성
public class Ex06 extends Lec06 {
int su=2222;
void func(){
System.out.println("자식기능");
}
void func2(){
System.out.println("자식만의 기능");
}
public static void main(String[] args) {
Lec06 me1=new Lec06();
me1.func();
System.out.println(me1.su);
System.out.println("-----------------");
Ex06 me2=new Ex06();
me2.func();
me2.func2(); //호출 가능.
System.out.println(me2.su);
System.out.println("-----------------");
Lec06 me3 = new Ex06();
me3.func();
me3.func2(); //오류 : 실행은 자식이지만 부모에 없기 때문에 실행되지 않는다.
System.out.println(me3.su);
}
}
タイプを親タイプとして使用する場合は、親定義のタイプしか使用できません.ただし、方法に限られるインプリメンテーションは私のオブジェクト上で発生するため、定義されているかどうかを決定した後、そのタイプを考慮せずに私のオブジェクトを実行する方法として作成されます.
Objectクラス再定義の使用
:すべてのクラスがObjectクラスを継承するため、オブジェクトクラスの上書き方法を「マイクラス」で使用することもできます.
package com.bit.day08.am;
class Lec06{
int su=1111;
void func(){
System.out.println("부모기능");
}
}
//다형성
public class Ex06 extends Lec06 {
int su=2222;
void func(){
System.out.println("자식기능");
}
void func2(){
System.out.println("자식만의 기능");
}
public static void main(String[] args) {
Lec06 me1=new Lec06();
me1.func();
System.out.println(me1.su);
System.out.println("-----------------");
Ex06 me2=new Ex06();
me2.func();
me2.func2(); //호출 가능.
System.out.println(me2.su);
System.out.println("-----------------");
Lec06 me3 = new Ex06();
me3.func();
// me3.func2();
System.out.println(me3.su);
System.out.println("------------------");
Object obj=new Ex06();
System.out.println(obj); //지금 이걸 보여주는 이유가 무ㅓ지?
System.out.println(obj.toString()); //내가 오버라이딩한 메소드로 나옴
}
public String toString(){ //toString 메소드 오버라이딩
return "내가 재정의";
}
}
package com.bit.day08.am;
class Lec06{
int su=1111;
void func(){
System.out.println("부모기능");
}
}
//다형성
public class Ex06 extends Lec06 {
int su=2222;
void func(){
System.out.println("자식기능");
}
void func2(){
System.out.println("자식만의 기능");
}
public static void main(String[] args) {
Lec06 me1=new Lec06();
me1.func();
System.out.println(me1.su);
System.out.println("-----------------");
Ex06 me2=new Ex06();
me2.func();
me2.func2(); //호출 가능.
System.out.println(me2.su);
System.out.println("-----------------");
Lec06 me3 = new Ex06();
me3.func();
// me3.func2();
System.out.println(me3.su);
System.out.println("------------------");
Ex06 obj1=new Ex06();
Ex06 obj2=new Ex06();
System.out.println(obj1==obj2); //false
System.out.println(obj1.equals(obj2)); //false - value값 비교를 했기 때문에. 저 객체의 값이 뭔지 몰라서
}
//object 클래스 재정의 --> 오버라이드해서 덮어써서 비교. 재정의 후 출력하면 true가 나온다.
public boolean equals(Object obj) {
return toString().equals(obj.toString()); // =obj1.toString().equals(2222);
}
public String toString(){
return ""+su;
}
}
たけいせいていりpackage com.bit.day08.am;
//다형성 - 부모의 타입으로도 받을 수 있는 상황
//Lec07 lec = new Lec07(); --> "Lec07-func01()"
//Lec07 lec = new Lec07(); --> x
//Lec77 lec = new Lec77(); --> "Lec77-func01()"
//Lec77 lec = new Lec77(); --> "Lec77-func02()"
//Lec07 lec = new Lec77(); --> "Lec77-func01()"
//Lec07 lec = new Lec77(); --> "Lec77-func02()" x
class Lec07{
public void func01(){
System.out.println("Lec07-func01()");
}
}
class Lec77 extends Lec07{
public void func01(){
System.out.println("Lec77-func01()");
}
public void func02(){
System.out.println("Lec77-func02()");
}
}
public class Ex07 {
public static void main(String[] args) {
}
}
▼▼▼多形の例:テレビ、ラジオを別々に動作させたい場合は、共通のon、off動作コードがあります.多形性を利用して、共通のコードセットを一緒にして、必要なオブジェクトを作成して、そのオブジェクトの動作だけを実行することができます.
共通のコレクションを親とし、子オブジェクトは共通の機能+必要な機能を再定義することによってのみ実行できます.
package com.bit.day08.am;
public class Ex08 {
public static void main(String[] args) {
// Machine01 obj = new Machine01();
// Tv obj=new Tv();
// Machine01 obj=new Tv();
java.util.Scanner sc = new java.util.Scanner(System.in);
System.out.println("1.Tv 2.Radio 0.exit>");
int input=sc.nextInt();
Machine01 obj=null; //부모의 타입을 가진다.
if(input==1){
obj=new Tv();
} else if(input==2){
obj=new Radio();
}
obj.on();
obj.work();
obj.off();
}
}
// 라디오 클래스
public class Radio extends Machine01{
public void work(){
System.out.println("주파수를 잡아 소리를 들려줍니다");
super.work(); //부모클래스에 있는 work메소드 호출
}
}
Reference
この問題について(たけいせい), 我々は、より多くの情報をここで見つけました https://velog.io/@jinkyung/다형성テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol