package ex0722;

public class Ex05_Inheritance {
	public static void main(String[] args) {
		Sample5 ss1 = new Sample5();
		ss1.disp();
		System.out.println();
	
		Sample5 ss2 = new Sample5(77);
		ss2.disp();
		System.out.println();
		
		System.out.println(ss1.equals(ss2)); // 주소비교

	}
}
class Test5 {
	int x;
	
	public Test5() {
		x = 0;
		System.out.println("상위 클래스-인자없는 생성자");
	}
	
	public Test5(int x) {
		this.x = x;
		System.out.println("상위 클래스-인자 하나인 생성자");
	}
	
	public void print() {
		System.out.println(x);
	}
}

class Sample5 extends Test5{
	int a;
	
	public Sample5() { 
		// super(); 이 생략된 것임
		a = 0;
		System.out.println("하위 클래스-인자없는 생성자");
	}
	
	public Sample5(int x) {
		// super(); 와 this는 동시에 쓸 수 없다.
		this(10, x); // this([인수]); 가 있으면 super([인수]);는 있을 수 없다.
		System.out.println("하위 클래스-인자 하나인 생성자");
	}
	
	public Sample5(int a, int x) {
		super(x);
		this.a = a;
		System.out.println("하위 클래스-인자 두개인 생성자");
	}
	
	public void disp() {
		System.out.println(a+","+x);
	}
}

this.a // 내 자신의 필드 a
super.a // 아버지의 필드 a

this(10); // 자신의 클래스에서 다른 생성자를 호출

super(); 
super(10); // 상위 클래스의 인자가 하나인 생성자 몸체 실행

 

 

 

package ex0722;

public class Ex04_Inheritance {
	public static void main(String[] args) {
		// Test4 t = new Test4(); 컴파일 오류. 인자가 없는 생성자가 없음.
		// Test4 t = new Test4(5)
		
		Sample4 ss = new Sample4 ();
		ss.disp();
	}
}
class Test4 {
	int x;
	
	
	// 인자가 있는 생성자만 존재
	public Test4(int x) {
		this.x = x;
	}
	
	public void print() {
		System.out.println(x);
	}
}

// 상위 클래스에 인자가 있는 생성자만 존재하면
// 하위 클래스는 반드시 생성자를 만들고 명시적으로 상위 클래스 생성자를 호출해야 한다.
class Sample4 extends Test4 {
	int a = 10;
	
	public Sample4() {
		// super(); 컴파일 오류. 인자가 없는 생성자가 상위에 없으므로
		super(100);
	}
	
	public void disp() {
		System.out.println(a);
	}
}

package ex0722;

public class Ex03_Inheritance {
	public static void main(String[] args) {
		Sample3 ss = new Sample3();
		ss.disp();
		
		/*
		 - 하위 클래스의 객체를 생성하는 경우
		 	1. 상위 클래스의 필드 메모리 할당, 기본값 초기화, 초기화 블럭 실행
		 	2. 하위 클래스의 필드 메모리 할당, 기본값 초기화, 초기화 블럭 실행
		 	3. 상위 클래스의 생성자 몸체 실행(하위 클래스 생성자의 최상단의 super([인수])호출되어 실행됨)
		 	4. 하위 클래스의 생성자 몸체 실행
		 */
		
	}
}
class Test3 {
	int a=10;
	
	public Test3() {
		System.out.println("Test2 생성자...");
	}
	
	public void print() {
		System.out.println(a);
	}
}

class Sample3 extends Test3{
	int x=100;
	
	public Sample3() {
		super(); // 상위 클래스 생성자 몸체 호출. 최상단에 한번만 가능. 
				 // 없으면 컴파일할 때 컴파일러가 super(); 추가하여 상위 클래스의 디폴트 생성자 몸체 호출 
		System.out.println("Sample3 생성자...");
	}
	
	public void disp() {
		System.out.println(a+","+x);
	}

 

package ex0722;

public class Ex02_Inheritance {
	public static void main(String[] args) {
		Sample2 ss = new Sample2();
		ss.disp();
		
		
	}
}
class Test2 {
	int a=10;
	int b=20;
	
	public void print() {
		System.out.println(a+":"+b);
	}
}

class Sample2 extends Test2 {
	int b=100;
	int x=200;
	int y=300;
	
	public void disp() {
		int x=50;
		System.out.println("a:"+a); // 10, super 클래스의 a필드
		System.out.println("b:"+b); // 100, 자신클래스의 b필드 
		System.out.println("super.b:"+super.b); // 20, super 클래스의 b필드
		System.out.println("x:"+x); // 50, 지역변수
		System.out.println("this.x:"+this.x); // 200, 자신클래스의 x필드
		System.out.println("y:"+y); // 300, 자신클래스의 y필드
	}
}

this.a // 내 자신의 필드 a
super.a // 아버지의 필드 a

this(10); // 자신의 클래스에서 다른 생성자를 호출

super(); 
super(10);

package ex0722;

public class Ex01_Inheritance {
	public static void main(String[] args) {
		Sample1 s = new Sample1();
		
		System.out.println(s.c); // 상위 클래스 필드 접근
		s.print(); // 상위 클래스 메소드 접근
		
		s.disp(); //
	}
}
class Test1 { // 상위클래스 : Object
	private int a =10; // 하위 클래스도 접근 할 수 없다.
	int b=20;		   // 동일한 패키지에서만 접근 할 수 있다.
	protected int c=30;// 동일한 패키지 및 하위 클래스는 어디에서나 접근할 수 있
	public int d=40;   // 모두 접근 할 수 있다. 
	
	public void print() {
		System.out.println(a+":"+b+":"+c+":"+d);
	}
}

class Sample1 extends Test1 { // 상속, 자바는 단일 상속만 지원한다.
	int x =10;
	
	public void disp() {
		// System.out.println(a); // 컴파일 오류. 상위 클래스의 private 접근 제어자는 접근 불가
		
		System.out.println("상위클래스에서 물려 받은 필드 : "+b+","+c+","+d);
	}
}

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0722_Ex03_Inheritance : 생성자  (0) 2021.07.22
0722_Ex02_Inheritance : 상속  (0) 2021.07.22
0721_Ex02_NumberFormat : Java API  (0) 2021.07.21
0721_Ex01_NumberFormat : Java API  (0) 2021.07.21
0720_복습_읽어보기  (0) 2021.07.21
import java.text.NumberFormat;
import java.text.ParseException;

public class Ex02_NumberFormat {

	public static void main(String[] args) {
		String s1 = "1000";
		String s2 = "1,234"; 
		String s3 = "4567.12";
		// int a = Integer.parseInt(s2); 런타임 오류(문자열에 , 가 있어서)
		int a = Integer.parseInt(s2.replaceAll(",", ""));
		System.out.println(a);
		
		// 문자열 -> 숫자
		NumberFormat nf = NumberFormat.getInstance();
		
		// Number : Integer, Long, Double 등의 상위 클래스
		// Integer, Long, Double 클래스는 서로 상하(상속) 관계가 성립되지 않는다. 서로 형변환 불가
		
		try {
			// 예외를 가지고 있는 코드 : 프로그램 실행중 예외가 발생하면 catch블럭을 실행
			Number n1 = nf.parse(s1);
			Number n2 = nf.parse(s2);
			Number n3 = nf.parse(s3);
			
			System.out.println(n1); // 1000
			System.out.println(n2); // 1234
			System.out.println(n3); // 4567.12
			
			// System.out.println(n1 + 1000); // 컴 오류. n1은 객체이며 사칙연산 불가
			
			// Integer ob = (Integer)n1; // Number를 Integer로 형 변환. 런타임 오류(Long을 Integer로 형변환 해서)
			
			Long ob = (Long) n1; // parse()로 형변환된 결과는 정수는 Long,실수는 Double임
			System.out.println(ob+100); // 1100
				// 실제는 ob.longValue()+100 임 
			
			// 실수를 정수형만 처리하도록
			nf.setParseIntegerOnly(true);
			Number n4 = nf.parse(s3);
			System.out.println(n4); // 4567
			
		} catch (ParseException e) {
			// 예외(에러)가 발생할 때
			e.printStackTrace(); // 에러 메시지를 출력
		} // 예외를 내포하고 있기 때문에 바로 처리할 수 없다. 
		
	}

}

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0722_Ex02_Inheritance : 상속  (0) 2021.07.22
0722_Ex01_Inheritance : 상속  (0) 2021.07.22
0721_Ex01_NumberFormat : Java API  (0) 2021.07.21
0720_복습_읽어보기  (0) 2021.07.21
0720_Ex15_Math : Java API  (0) 2021.07.21
import java.text.NumberFormat;

public class Ex01_NumberFormat {
	public static void matin(String[] args) {
    	String s;
        
        // 숫자 -> 문자열 로 서식에 맞춰 바꾸어 준다.
        // 숫자에 대한 포맷
        NumberFormat nf = NumberFormat.getInstance();
        
        int a = 12345;
        s = nf.format(a);
        System.out.println(s);
        
        S = String.format("%,d", a);
        System.out.println(s);
        
        double b = 31456.2569;
        s = nf.format(b);
        System.out.println(s); // 31,456.257 소수점 3자리까지 4번째 자리는 반올림
        
        NumberFormat nf2 = NumberFormat.getInstance();
        nf2.setMaximumFractionDigits(4); // 소수점 이하 최대 4자리
        nf2.setMinimumFractionDigits(2); // 소수점 이하 최소 2자리
        System.out.println(nf2.format(1234.456789)); // 1,234.4568
        System.out.println(nf2.format(1234)); // 1,234.00
        System.out.println(nf2.format(1234.5)); // 1,234.50
        
        // 통화에 대한 서식
        NumberFormat nf3 = NumberFormat.getCurrencyInstance();
        System.out.println("원화:"+nf3.format(12345)); // ₩12,345
        // Locale.KOREA:한국, 기본 로케일은 시스템의 로케일
        // 국가를 미국으로 변경.
        NumberFormat nf4 = NumberFormat.getCurrencyInstance(Locale.UX);
        System.out.println("달러:"+nf4.format(12345)); // $12,345.00
        
        // %에 대한 서식
        NumberFormat nf5 = NumberFormat.getPercentInstance();
        System.out.println("퍼센트:"+nf5.format(0.23)); // 23%
    }
}

 

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0722_Ex01_Inheritance : 상속  (0) 2021.07.22
0721_Ex02_NumberFormat : Java API  (0) 2021.07.21
0720_복습_읽어보기  (0) 2021.07.21
0720_Ex15_Math : Java API  (0) 2021.07.21
0720_Ex12_Date : Java API  (0) 2021.07.21

생성자

- new 라는 연산자와 꼭 같이 사용되어 객체를 생성할 때 호출됨
- 객체가 생성되면 생성자의 몸체를 실행해 초기화를 담당한다. 
- 생성자는 인스턴스 변수의 초기화 및 객체가 생성될 때 실행해야 할 작업을 위해 사용
- 자바의 모든 클래스에는 하나 이상의 생성자가 존재한다.
- 생성자는 인수를 가질 수 있으며, 중복 정의가 가능하다.

디폴트 생성자
- 생성자를 정의하지 않는 경우에 컴파일러는 인수도 없으며 
  아무런 기능도 지니지 않는 생성자를 자동 삽입하는데 이를 디폴트 생성자라 한다.

 

this
 현재 클래스의 인스턴스로 객체 자신에 대한 참조 값을 갖는다.
 this는 현재 클래스의 인스턴스를 참조하기 때문에 생성자나 인스턴스 메소드 내에서만 사용하며
 클래스 메소드에서는 사용 할 수 없다.

 

클래스 : public, 생략한 경우(default)
생성자 : 4개 전부
메소드 : 4개 전부
필드 : 4개 전부
지역변수 : 붙일 수 없음.

static 객체를 생성하지 않고 바로 접근할 수 있다.

object 는 최상위 클래스다

접근 제어자
멤버(필드, 메소드) 또는 클래스에 사용되어 외부에서 접근하지 못하도록 제한하는 역할
클래스 메소드 필드 생성자 (4곳)에 붙일 수 있다.

private : 같은 클래스에서만 접근 가능
default : 동일한 패키지에서만 접근 가능 (패키지 폴더)
protected : 동일한 패키지 및 하위클래스는 제약 없이 접근 가능
public : 제약 없이 어디서든지 접근 가능

String
문자열은 상수풀에 저장(String Constant Pool)
내용불변 (Immutable) 내용이 변경되면 새로운 영역에 메모리를 할당 받아 처리하고 이전 공간은 가비지 컬렉터의 대상이 된다.
final 클래스로 하위 클래스를 가질 수 없다.
length() 문자열의 길이
substring() 특정 위치의 문자열 추출
charAt()특정 위치의 문자 한개 추출
equals() 내용을 비교
equalsIgnoreCase 대소문자 비교안하고 내용 비교
startswith
endswith
compareTo 차이를 ASCII코드로 반환함 문자열은 부등호로 비교불가
indexOf 
lastIndexOf
replace
replaceAll
split (특정패턴으로 분리해서 배열로 리턴받는다)
matches() 해당패턴이 존재하는지 안하는지 
format()
getByte() ASCII코드 값으로 바꿔서 저장

StringBuffer, StringBuilder
toString 클래스명@해쉬코드
Integer parseInt 문자열을 정수로 바꿈. (,나 .이 있으면 안됨)
Integer toString 숫자를 문자열로 바꿀때

 

=================

최근 몇 일 간 복습한 것 읽어보면서 포스팅

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0721_Ex02_NumberFormat : Java API  (0) 2021.07.21
0721_Ex01_NumberFormat : Java API  (0) 2021.07.21
0720_Ex15_Math : Java API  (0) 2021.07.21
0720_Ex12_Date : Java API  (0) 2021.07.21
0720_Ex06_Calendar : Java API  (0) 2021.07.20

+ Recent posts