어제 거 복습!
public class Init {
int num = 10;
static int sNum = 100;
//인스턴스 초기화 블럭: Test에서 객체가 생성될 때 호출
{
System.out.println("인스턴스 초기화 블럭"); //순서4
System.out.println("인스턴스 변수 num = " + num); //순서5
num = 1; //순서6
sNum = 800; //객체가 생성되기 전에 클래스가 먼저 저장공간이 생기기 때문에 클래스 변수 호출은 가능
}
//클래스 초기화 블럭: 클래스가 생성될 때 호출
static {
System.out.println("클래스 초기화 블럭"); //순서1
System.out.println("클래스 변수 sNum = " + sNum); //순서2
sNum = 200; //순서3
//객체가 생성되지 않아서(저장 공간이 없음) num값을 호출할 수 없음
}
//생성자: 객체가 생성될 때 호출
Init() {
System.out.println("생성자 호출"); //순서7
System.out.println("인스턴스 변수 num = " + num); //순서8
System.out.println("클래스 변수 sNum = " + sNum); //순서9
num = 2;
sNum = 500; //순서10
}
보통 다 쓰진 않고 클래스 초기화는 별로 안 쓰고 거의 생성자를 많이 하고 아니면 인스턴스 초기화 블럭과 생성자 중 택1로 프로그래밍함
기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것.
하위 클래스는 상위 클래스의 모든 멤버를 상속 받는다.(생성자, 초기화 블럭 제외)
class 하위클래스 extends 상위클래스
class point3D extends point{
}
*new 해서 객체 생성 후 가져오는 건 사용할 수도 있고, 사용 안 할 수도 있어서 하는 거고
상속으로 가져오는 거는 반드시! 사용하게 돼서 상속을 쓰고 가져옴
*몰라도 된대 근데 어차피 나중엔 알아야 될 것 같아서 적어놓는다
상속관계(is-a): '-은 -이다'
포함관계(has-a): '-은 -을 가지고 있다'
Circle is a Point
원은 점이다.
Circle has a Point
원은 점을 가지고 있다.
package inheritance03;
class A {
int aa = 1;
}
class B extends A {
int bb = 10;
}
class C extends B {
int cc = 30;
}
public class InheritanceTest01 {
public static void main(String[] args) {
C objC = new C();
System.out.println("aa = " + objC.aa);
System.out.println("bb = " + objC.bb);
System.out.println("cc = " + objC.cc);
B objB = new B();
System.out.println("aa = " + objB.aa);
System.out.println("bb = " + objB.bb);
//System.out.println("cc = " + objB.cc); 상속 범위 초과. 사용 불가.
A objA = new A();
System.out.println("aa = " + objA.aa);
//System.out.println("bb = " + objA.bb);
//System.out.println("cc = " + objA.cc); 상속 범위 초과. 사용 불가.
}
}
*연습문제*
//Phone:공통 속성, 전화송수신/ CellPhone: Phone상속, 문자, 동영상 /SmartPhone:CellPhone상속, 카톡, 인터넷 /PhoneTest: 실행
package inheritance03;
class AA {
int i, j;
void setIJ(int x, int y) { //보통 값을 넣을 때는 set, 값을 얻어올 때는 get 키워드 사용
i = x;
j = y;
}
}
class BB extends AA {
int total;
int sum() {
total = i + j; //AA 상속받아서 사용가능.
return total;
}
}
public class InheritanceTest02 {
public static void main(String[] args) {
BB b1 = new BB(); //BB가 AA를 상속받았기 때문에 AA의 i,j의 객체 저장공간도 자동으로 생성됨. 그래야 사용가능하니까.
b1.setIJ(30, 70);
System.out.println(b1.sum());
=> 100
}
}
package inheritance03;
class A1 {
int i;
}
class B1 extends A1 {
String i;
}
public class InheritanceTest03 {
public static void main(String[] args) {
B1 b1 = new B1();
b1.i = "kh정보교육원";
System.out.println(b1.i);
// 우선순위는 하위 클래스에 변수가 있으면 먼저 실행됨.
//b1.i = 100; 오류남. 제일 먼저 B1의 i를 보니 String 형태의 kh~가 들어가있기 때문에 정수는 쓸 수 없음.
A1 a1 = new A1();
a1.i = 100; //얘는 가능~
}
}
package super07;
class Parent2 {
int x;
Parent2(int x) { //매개변수를 넣는 순간 오류.
this.x = x;
System.out.println("부모 생성자");
}
}
class Child2 extends Parent2 { //상속을 받으려면 상위 클래스에서 객체가 생성되고 그걸 받는 건데 상위 보니까 x값을 할당해야 객체가 만들어짐
int x = 100;
Child2() {
super(3); //x에 해당하는 값을 하위 클래스에서 명시적으로 넣어줘야 오류가 나지 않음.
System.out.println("자식 생성자");
}
}
public class SuperTest3 {
public static void main(String[] args) {
Child2 ch2 = new Child2();
}
}
*연습문제*
//부모클래스 변수 1개(a의 제곱값), 생성자(매개변수 int형 1개){매개변수의 값 a의 제곱을 하여 인스턴스 변수에 저장}
자식클래스 변수 1개(b의 제곱값), 생성자(int a, int b){매개변수의 값 b의 제곱을 하여 인스턴스 변수에 저장}
아싸~ 오류나는 거 잘 해결해가며 풀었다~ 성장한 것 같아서 기쁘다!
아무것도 상속받지 않으면 컴파일러가 'extends Object'를 컴파일함.
-Object: 최상위 클래스라서 모든 클래스들이 상속받음.
해시코드의 메서드들을 가지고 있음.
*override: ~위에 덮어쓰다
오버로딩(매개변수의 개수와 타입이 다름/이름만 같을뿐, 새로운 메소드를 정의하는 것)이랑 헷갈리지 않게 주의!
-상속일 때만 사용.
-상위 클래스로부터 상속받은 메소드 내용만을 하위 클래스에 맞게 변경하는 것. 이름, 매개변수, 리턴타입 모두!!!똑같아야 한다.
-변경하면 무조건 하위 클래스의 수정된 값이 출력됨! 내 데이터를 먼저 살펴보니까!
class parent {
void parentMethod() { a }
}
class child extends parent {
void parentMethod() { b }
}
package super07;
class Parent {
int x = 10;
}
class Child extends Parent{
int x = 100;
void method() {
int x = 1000;
System.out.println("x=" + x); //지역변수 x가리킴, 지역변수 없었으면 인스턴스 변수 x 가리킴
System.out.println("this.x=" + this.x); //인스턴스 변수 x 가리킴
System.out.println("super.x=" + super.x); //상위클래스 x 가리킴, 상위 클래스에 x가 없었다면 오류남.
}
}
public class SuperTest {
public static void main(String[] args) {
Child ch = new Child();
ch.method();
}
}