Java - 추상 클래스

2025. 1. 23. 18:10·Java

1. 추상 클래스

package method;
import java.util.ArrayList;

public class ab1 extends ab1_box1{
	public static void main(String[] args) {
		
		abox1();
	}
}
//abstract : 추상클래스
abstract class ab2_box1{	//추상 클래스 선언 
	String userid;			//필드에 변수를 선언시 public, protected를 이용
	//private 으로 변수를 선언시 abstract class 안에서만 작동이 됨
	public void aaa() {};
	public String bbb() {return null;};
	public Integer ccc() {return 0;};
}	 

class ab2_class extends ab2_box1{
	@Override	//@ : 어노테이션
	public void aaa() {
		// TODO Auto-generated method stub
		super.aaa();
	}
	@Override
	public String bbb() {
		// TODO Auto-generated method stub
		return super.bbb();
	}
	@Override
	public Integer ccc() {
		// TODO Auto-generated method stub
		return super.ccc();
	}
    
	public ArrayList<String> ddd(){
		return null;
	}
}

//extends는 상속 클래스를 한개만 상속받을 수 있음
class ab3_class extends ab2_box1{
	@Override
	public void aaa() {
		this.userid = "aaa";
		System.out.println(userid);
		super.aaa();	//문법 안썼으면 슈퍼 안써도됨
	}
}
  • abstract : 추상 클래스
    • extends : 외부 클래스를 상속 받아서 처리
    • 오버로드, 오버로딩(Overload, Overloading) : 상속 메소드외에 개발자 별도로 메소드를 구성  
    • 오버라이드, 오버리딩(override,overriding) : 상속 메소드
    • 필드에 변수를 선언시 public, protected를 이용

추상 클래스 파일 

package method;
import java.util.*;

abstract class ab_box {
	String userid = null; // 추상 클래스 전역변수
	Scanner sc = new Scanner(System.in); // Scanner
	ArrayList<String> all = null;
	final int level = 1; // 상수로 선언하여 값을 변경 못하며 해당 변수를 로드 ex)회사전화번호

	// 추상클래스를 상속받는 동시에 실행되는 메소드이며 별도의 @이 출력되지 않음
	public ab_box() { // 즉시실행메소드 getter setter같은 경우
		this.userid = "hong";
		System.out.println(this.userid);
	};
	public void ab_method1() {
		int data[] = { 10, 20, 30, 40};
		int f = 0;
		for (f = 0; f < data.length; f++) {
			System.out.println(data[f]);
		}
	}
	public void ab_method1(String uid) {
	};
	public void ab_method1(int uid) {
	};
}

추상클래스파일의 클래스 사용

package method;
import java.util.ArrayList;

public class ab2 {
	public static void main(String[] args) {
		ab2_box ab = new ab2_box();
		ab.ab_method1(); 
		ab.ab_method1(12345); 
	}
}

//ab_box 추상클래스 로드
class ab2_box extends ab_box{
	//즉시실행은 선언안해도 바로 실행됨 
	public ab2_box() {	//별도 메소드를 선언하여 클래스 로드시 즉시실행 가능
		String email = "hong@nate.com";
		System.out.println(email);
	}
	
	@Override
	public void ab_method1() {	//super : 추상클래스 안의 메소드에 코드를 작성한 경우 그 코드를 로드할때 사용
		super.ab_method1();	//추상클래스 메소드안에있는 코드도 쓰고싶을때 슈퍼를 쓰고 그 메소드안에 아무것도없을땐 굳이 안써도 됨
	}
	
	@Override
	public void ab_method1(int uid) {
		if(uid == 12345) {	//인증번호가 동일한 조건일 경우
			this.all = new ArrayList<String>();	//추상클래스 필드에 선언된 클래스 배열을 실행
			while(true) {
				System.out.println("상품명을 입력하세요(exit 입력시 종료) : ");
				String product = this.sc.nextLine();
				if(!product.equals("exit")) {
					this.all.add(product);
				}else {
					break;
				}
				System.out.println(this.all);	//사용자가 입력한 상품명 리스트 출력
			}
		}else {	//인증번호가 다른 경우 
			System.out.println("인증번호가 틀렸습니다");
		}		
	}	
}
  • super :추상클래스 안의 메소드에 코드를 작성한 경우 그 코드를 로드할때 사용

 

추상클래스파일

package method;
import java.text.SimpleDateFormat;
import java.util.*;

abstract class ab_box2 {
	public String today() {
		//local PC의 시간을 출력하는 라이브러리 
		Date day = new Date();	//이건 서버시간이 아니라 윈도우 시간

//		SimpleDateFormat sf = new SimpleDateFormat("yy-MM-dd");
//		SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
		SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		SimpleDateFormat sf2 = new SimpleDateFormat("E",Locale.ENGLISH);

		System.out.println(sf.format(day));
		System.out.println(sf2.format(day));

		return sf.format(day);
	}
	
	//추상 클래스에 사용된 추상 return 메소드 (단,중괄호,리턴 안씀 소괄호로 끝남)
	//abstract 메소드는 상속받을 경우 무조건 오버라이드 해야하는 메소드
	public abstract String product();
	public void basket() {}
	public abstract void userbasket();
}
  • 날짜
    • Date, SimpleDateFormat
      • yyyy : 년도 / MM : 월 / dd : 일
      • HH(hh) : 시간 24(12) / mm : 분 / ss : 초
      • hh기준 a : 오전/오후
      • E : 요일 / Locale : 언어셋변경할때 사용하는 라이브러리

추상클래스파일의 클래스 사용

package method;

public class ab3 {

	public static void main(String[] args) {
		ab3_box ab = new ab3_box();
		ab.today();
	}
}

class ab3_box extends ab_box2{
	@Override
	public String product() {
		String date = this.today();
		System.out.println(date);
		return null;
	}
	@Override
	public void userbasket() {
		// TODO Auto-generated method stub
	}
}
  • 추상클래스의 추상메소드는 무 조 건 로드해야한다 로드안하면 빨간줄!!

 

2. 자료형과 시간

package method;
public class string_etc {
	public static void main(String[] args) {	
		String a = "a1234";
		String b = "a1234";
		String c = new String("a1234");	//여기에 .intern때리면 true나옴 근데 d랑은 안됨 
		String d = new String("a1234");

		System.out.println(a == b);
		System.out.println(a.equals(b));
		System.out.println(a == c);		// false
		System.out.println(a.equals(c));
		System.out.println(c == d);		// false
		System.out.println(c.equals(d));

		String user = "홍길동";
		String welcome = "님 환영합니다.";
		String msg = user + welcome;
		
		StringBuffer sb = new StringBuffer();
		sb.append("강감찬");
		sb.append("님 포인트는 1500입니다.");
		System.out.println(sb);
		
		StringBuilder sb2 = new StringBuilder();
		sb2.append("LG 냉장고");
		sb2.append("- 350000");
		System.out.println(sb2);
		
		//Unboxing => 기본타입, Long->long long->long
		long t = System.currentTimeMillis();
		long sum = 0L;
		int f;
		for(f=1;f<1000000;f++) {
			sum += f;
		}
		System.out.println("실행시간 : "+(System.currentTimeMillis()-t));
		
		//long을 Long에 넣음 -> 오래걸림 
		//Boxing => 기본 타입을 클래스 형태 타입으로 변경 long->Long int->Integer
		long t2 = System.currentTimeMillis();
		Long sum2 = 0L;
		int f2;
		for(f2=1;f2<1000000;f2++) {
			sum2 += f2;
		}
		System.out.println("실행시간 : "+(System.currentTimeMillis()-t2));
		
		/* 박싱 */
		Integer num = new Integer(100);
		
		/* 언박싱 */
		String w = "100";
		int no = Integer.parseInt(w); 
		no = num.valueOf(w); //parseInt보다 더느림
		
		//클래스변수, 박싱상태 많이쓰면 느려짐
		//Integer 필드에 올려놓을때 null 해두면 오류 많이 발생 주의 
		Integer aa = null;
		int zz = 10;
		System.out.println(aa+zz);		
	}
}
  • String 주의점
    • 같은 자료형 또는 자료형 클래스라고 해도 new가 붙으면 인스턴스 영역(메모리)로 변경되므로 비교하는 상황이 달라질 수 있음  
  • 쓰레드를 이용한 문자열 핸들링
    • StringBuffer : 버퍼이용 / 멀티쓰레드에서 빠름 -> 모바일 
    • StringBuilder : 빌더이용 / 단일쓰레드에서 빠름 -> 웹
  • 박싱
    • unboxing : 기본타입
      • Long->long long->long
    • boxing
      • 기본 타입을 클래스 형태 타입으로 변경 -> 오래걸림
        • long->Long int->Integer
  • Integer 주의점
    • 필드에 올려놓을때 null로 초기화해두면 연산시 nullpoint 오류 발생!
저작자표시 비영리 변경금지 (새창열림)
'Java' 카테고리의 다른 글
  • 복습10 - Java 응용
  • 복습9 - Java 응용
  • Java - DTO 응용
  • Java - 예외처리
9na0
9na0
응애
  • 9na0
    구나딩
    9na0
  • 전체
    오늘
    어제
    • 분류 전체보기 (210)
      • Web (118)
      • Java (28)
      • 데이터베이스 (14)
      • 세팅 (12)
      • 과제 (3)
      • 쪽지시험 (2)
      • 정보처리기사 (4)
      • 서버 (24)
  • 블로그 메뉴

    • 링크

      • 포폴
      • 구깃
    • 공지사항

    • 인기 글

    • 태그

      exam1_1~10
      notice_writer
      ab1
      spring-boot
      io_dto
      datalist
      java_io1~10
      file25
      Oracle
      net3
      net1
      re2
      net5~10
      file24
      re_java10
      net2
      net4
      file25_t
      macbook pro m4
      noticewriteok
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    9na0
    Java - 추상 클래스
    상단으로

    티스토리툴바