abstract(추상 클래스) :코드 규격화를 위함(협업),가상 공간(메모리에 안잡힘)
- extends : 상속 클래스
- @Override : 상속된 메소드를 호출
- overloading : 상속받는 메소드 외에 추가로 메소드를 생성함(추상클래스에 선언하지 않은 메소드명 사용해야함)
로드방식
class b_class extends a_class{
@Override
메소드{}
}
👀 전체 정리 : https://dev-eunse.tistory.com/95
❗ 중요 주의사항 : 코드를 이미 진행시 해당 추상 메소드 이름 을 변경하면 상속받은 모든 클래스에 문제 발생!
⚡ abstract(추상 클래스) - 상속(협업시 주로 사용)
package oop2; //외부 클래스 로드 및 abstract(추상 클래스) public class oop_class2 { public static void main(String[] args) { oc2_box ob2 = new oc2_box(); //추상클래스 포함 ob2.aaa(); String result = ob2.bbb(); System.out.println(result); ob2.ccc(); } } //추상 클래스생성 abstract class ab_box1{ public void aaa() {}; //추상 메소드 public String bbb() {return null;}; //추상 메소드 public void ccc() {}; //해당 추상 메소드는 사용하지 않음(꼭 사용하지 않아도 됨) } //일반 클래스 class oc2_box extends ab_box1{ //extends : 상속 클래스 @Override //상속된 메소드를 호출 public void aaa() { System.out.println("aaa"); super.aaa(); } @Override //상속된 메소드를 호출 public String bbb() { String user = "강감찬"; return user; } //overloading : 상속받는 메소드 외에 추가로 메소드를 생성함 //추상클래스에 선언하지 않은 메소드명 사용해야함 public void ccc() { System.out.println("overloading 호출"); } }
⚡ 예제2
package oop2; import java.util.ArrayList; public class oop_class3 { public static void main(String[] args) { new oc3_box().ab_method1("유관순"); //이 두개는 서로 다른 메소드 new oc3_box().ab_method1(); //이 두개는 서로 다른 메소드 } } class oc3_box extends ab1 { @Override public void ab_method1(String uid) { this.userid = uid; System.out.println(this.userid); //유관순 출력 //scanner라이브러리 외부에서 가져옴 따로 선언x : 속도빨라짐 System.out.println("사용자 이름을 입력하세요 : "); String username = this.sc.next(); System.out.println(username); this.sc.close(); this.all = new ArrayList<String>(); this.all.add("HTML"); this.all.add("css"); this.all.add("java"); System.out.println(this.all); //[HTML, css, java] } @Override public void ab_method1() { System.out.println(this.level);//1 출력 } }
-외부 추상클래스 파일(프로젝트 초기 세팅 시 공용 파일로 주로 쓰임)package oop2; import java.util.List; import java.util.Scanner; //추상 클래스 선언 및 생성(공용) public abstract class ab1 { String userid = null; //추상 클래스 전역변수 Scanner sc = new Scanner(System.in); //추상 클래스에 라이브러리 호출 List<String> all = null; final int level = 1; //전역변수 값이 고정으로 필요할 경우 선언 public void ab_method1() {}; public void ab_method1(String uid) {}; public void ab_method1(int level) {}; /* 고정값으로 올려놓는 것들 : 사업자번호,회사명,회사정보..등 계속 나오는것(final) */ }
⚡ 응용
package oop2; import java.util.ArrayList; //ab2.java 연계 = 추상클래스 응용편 //추상 클래스를 이용하여 다음과 같이 결과가 나오도록 코드를 작성하시오 //사용자가 10개의 숫자를 입력합니다 //해당 숫자는 모두 클래스 배열에 저장되도록 합니다 //저장된 배열의 값을 모두 합한 결과값을 출력하시오 //단, 결과값 출력 내용은 , return 받아서 출력합니다. public class oop_class4 { public static void main(String[] args) { new oc4_box().numSum(); } } class oc4_box extends ab2 { @Override public void numSum() { int f; for(f=0; f<3; f++) { System.out.println("숫자를 입력하세요 : "); int no = this.sc.nextInt(); this.numlist.add(no); this.sum += this.numlist.get(f); } this.sc.close(); int dd = num(); System.out.println(dd); } @Override public int num() { return super.num(); } }
-외부 추상클래스 파일package oop2; //응용편 - oop_class4.java 연계 import java.util.ArrayList; import java.util.Scanner; public abstract class ab2 { Scanner sc = new Scanner(System.in); ArrayList<Integer> numlist = new ArrayList<Integer>(); int sum=0; public void numSum() {}; public int num() {return sum;}; }
🔽 🔽 선생님
⭐ super : 외부 class에서 로드하는 내용을 그대로 반영, abstract에 이미 제작되어있는 코드를 그대로 인식시킴
⭐ abstract 메소드 : 강제 사용 메소드
package oop2; import java.util.ArrayList; import java.util.List; public class oop_class4 { public static void main(String[] args) { new oc4_box().numSum(); } } class oc4_box extends ab2 { public oc4_box() { System.out.println("즉시실행 oc4_box"); } @Override public void ab_box() { // abstract 메소드 : 필수 사용해야함,인자값 받아오는것도 가능 } @Override public void numSum() { this.numlist = new ArrayList<Integer>(); int f; for(f=0; f<3; f++) { System.out.println("숫자를 입력하세요 : "); this.user = this.sc.nextInt(); this.numlist.add(this.user); this.sum += this.numlist.get(f); //총합계누적 } this.sc.close(); System.out.println(this.numlist); super.numSum(); //super란 abstract에 이미 제작되어있는 코드를 그대로 인식시킴 } @Override public int cal() { return super.cal(); } }
package oop2; import java.util.ArrayList; import java.util.Scanner; import java.util.List; public abstract class ab2 { Scanner sc = new Scanner(System.in); List<Integer> numlist = null; //클래스 배열 int sum=0; //총 합계 int user; //sc에 변수 쓰라고 미리 등록 public abstract void ab_box(); //필수사항 메소드 //{}어디? 추가 필요한 메소드 있으면 이거 알아서 가져다 쓰세요 란 뜻 //단점 : 적어놓은 이상 무조건 써야함 //즉시실행:해당 메소드는 abstract 안에서만 작동(제일 우선 작동) public ab2() {System.out.println("즉시실행!");}; public void numSum() { int result = this.cal(); //산술연산 작업 및 반복문.. System.out.println(result); }; public int cal() { //최종값 리턴 return this.sum; }; }
⚡ date() 활용 , 실제 클래스 즉시실행~abstract 즉시실행 연결
extend는 하나의 추상클래스 또는 실제클래스를 로드 할 수 있다.
실제class의 즉시실행(abstract 메소드와 형태 맞춰줘야함)
abstract 메소드 내용과 연결
package oop2; public class oop_class6 { public static void main(String[] args) { oc6_box ob = new oc6_box(50); ob.abc(); } } //extend는 하나의 추상클래스 또는 실제클래스를 로드 할 수 있다. class oc6_box extends ab3{ //실제class의 즉시실행(abstract 메소드와 형태 맞춰줘야함) //abstract 메소드 내용과 연결 public oc6_box(int a) { super(a); //(abstract 메소드 내용 : this.number = a;) //super : 외부 class에서 로드하는 내용을 그대로 반영 } @Override public String product() { return null; } @Override public Integer basket() { return null; } public void abc() { //overloading 메소드 System.out.println(number); //50출력 //--현재시간 출력 String to = this.today(); //abstract에 있는 return 메소드를 호출 System.out.println(to); //return값 출력 } // @Override //이미 abc에서 today 선언을 해서 굳이 들고올 필요 없음 // public String today() { // return super.today(); // } }
// abstract 파일package oop2; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public abstract class ab3 { int number = 0; public ab3(int a){ //즉시실행 this.number = a; } public abstract String product();//필수 메소드(문자) public abstract Integer basket();//필수 메소드(숫자) public void pay() { }; //--현재시간 출력 public String today() { Date day = new Date(); //현 pc시간 로드 //yyyy-MM-dd (yyyy : 연도, mm : 월, dd : 일) //HH(hh 12시간 기준,대문자는 24시간 기준) : 시간, mm : 분, ss : 초, //a : AM,PM여부 / E : 요일 //2024-05-13 출력 SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd"); //2024-05-13 03:38:36 오후 출력 //SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a E요일"); //Locale : 요일 어어셋 변경할 때 사용하는 라이브러리 //SimpleDateFormat sim = new SimpleDateFormat("E",Locale.ENGLISH); //System.out.println(sim.format(day)); //2024-05-13 return sim.format(day); } }
'CLASS > JAVA' 카테고리의 다른 글
#10-1 / Interface (0) | 2024.05.14 |
---|---|
#9-3 / class + class (0) | 2024.05.13 |
#9-1 / 배열에 해당 클래스를 로드하여 적용하는 방법(DTO),protected (0) | 2024.05.13 |
#8 / remind1 (0) | 2024.05.10 |
#7-4 / foreach,List배열 (0) | 2024.05.09 |