[TIL]インタフェースを実装する場所(例)
6282 ワード
1)NewleExamクラス
public class NewlecExam extends Exam implements ConsoleListener {
...
public void onPrint(Exam exam1) {
}
@Override
public void onPrint(Exam exam1) {
System.out.printf("컴퓨터 : %d\n", nexam.getCom());
}
@Override
public void onInput(Exam exam1) {
Scanner scan = new Scanner(System.in);
System.out.print("컴퓨터 > ");
com = scan.nextInt();
}
}
New lecExamでonPrintとonInputを上書きする場合は、Examテストをパラメータとして使用する必要はありません.
このように表現すると、衝突が発生します.
public class NewlecExam extends Exam {
...
class AAA implements ConsoleListener {
@Override
public void onPrint(Exam exam1) {
System.out.printf("컴퓨터 : %d\n", nexam.getCom());
}
@Override
public void onInput(Exam exam1) {
Scanner scan = new Scanner(System.in);
System.out.print("컴퓨터 > ");
com = scan.nextInt();
}
}
}
package part3.ex5.iface;
import java.util.Scanner;
public class NewlecExam extends Exam{
private int com;
public int getCom() {
return com;
}
public void setCom(int com) {
this.com = com;
}
public NewlecExam() {
this(0,0,0,0);
}
public NewlecExam(int kor, int eng, int math, int com) {
super(kor, eng, math);
this.com = com;
}
public int total() {
return super.total() + com ;
}
public double avg() {
return this.total()/4.0;
}
public void onPrint(Exam exam) {
}
}
2)ExamConsole類
public class ExamConsole {
private ConsoleListener listener;
private Exam exam;
public void setListener(ConsoleListener listener) {
this.listener = listener;
}
...
public void print() {
Scanner scan = new Scanner(System.in);
if(printer != null)
printer.printBanner();
else {
System.out.println("┌───────────────────────────────────┐");
System.out.println("│ 성적 출력 │");
System.out.println("└───────────────────────────────────┘");
}
System.out.println("국어 : " + exam.getKor());
System.out.println("영어 : " + exam.getEng());
System.out.println("수학 : " + exam.getMath());
// 새롭게 추가된 과목을 출력할 수 있는 코드 영역
if(listener != null)
listener.onPrint(exam);
int total = exam.total();
double avg = exam.avg();
System.out.println("총점 :" + total);
System.out.printf("평균 : %.2f\n", avg);
}
public void input() {
Scanner scan = new Scanner(System.in);
System.out.println("┌───────────────────────────────────┐");
System.out.println("│ 성적 출력 │");
System.out.println("└───────────────────────────────────┘");
System.out.print("국어 > ");
int kor = scan.nextInt();
System.out.print("영어 > ");
int eng = scan.nextInt();
System.out.print("수학 > ");
int math = scan.nextInt();
exam.setKor(kor);
exam.setEng(eng);
exam.setMath(math);
if(listener != null)
listener.onInput(exam);
}
}
3)ConsoleListenerクラス
public interface ConsoleListener {
void onPrint(Exam exam);
void onInput(Exam exam);
}
4)NewleConsoleListenerクラス
public class NewlecConsoleListener implements ConsoleListener {
@Override
public void onPrint(Exam exam) {
NewlecExam nexam = (NewlecExam) exam;
System.out.printf("컴퓨터 : %d\n", nexam.getCom());
}
@Override
public void onInput(Exam exam) {
NewlecExam nexam = (NewlecExam) exam;
Scanner scan = new Scanner(System.in);
System.out.print("컴퓨터 > ");
int com = scan.nextInt();
nexam.setCom(com);
}
}
ConsoleListenerインタフェースのインプリメンテーション.
インプリメンテーション->インタフェース.これも継承です.(約定のみ継承)
public void onPrint() {
NewlecExam exam = (NewlecExam) console.getExam();
System.out.printf("컴퓨터 : %d\n", exam.getCom());
上記のコードで記述すると、データが挿入されていないという問題があります.
コンピュータ科目を出力できません.
5)プログラム類
public class Program {
public static void main(String[] args) throws IOException{
NewlecExam exam = new NewlecExam();
ExamConsole console = new ExamConsole();
console.setExam(exam);
//ConsoleListener listener = new NewlecConsoleListener();
NewlecExam.AAA listener = exam.new AAA(); -> 중첩 클래스에서 호출
console.setListener(listener);
console.input();
console.print();
}
ConsoleListener listener = new NewlecConsoleListener();
参照型に制限されます.NewlecExam.AAA listener = exam.new AAA();
->ネストされたクラスで呼び出されます.オーバーラップクラスをプログラムに移行した後、
AAA listener = new AAA();
に置き換えます.元のExamテストをパラメータに書き込むことができます.
class AAA implements ConsoleListener{
// int com=10;
@Override
public void onPrint(Exam exam1) {
//int com = 100;
//NewlecExam nexam = (NewlecExam) exam;
//System.out.printf("컴퓨터 : %d\n", nexam.getCom());
System.out.printf("컴퓨터 : %d\n", exam.getCom());
}
@Override
public void onInput(Exam exam1) {
//NewlecExam nexam = (NewlecExam) exam;
Scanner scan = new Scanner(System.in);
System.out.print("컴퓨터 > ");
int com = scan.nextInt();
exam.setCom(com);
}
}
this;
コールthis.com
.NewlecExam.this;
コールNewlecExam.this.com
.NewleExamのネストされたクラス部分を切り取り、プログラムに移動できます.
Reference
この問題について([TIL]インタフェースを実装する場所(例)), 我々は、より多くの情報をここで見つけました https://velog.io/@psh94/TIL-인터페이스를-구현하는-위치テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol