미리 만든 [Person - 이름, 키, 나이, 몸무게 ]클래스를 상속하면, 

아래 자식클래스들[ Student - 학점, 학번, 학년 + (상속)이름, 키,나이,몸무게 ] , [ Teacher - 교직원 번호, 월급, 년차  + (상속)이름, 키,나이,몸무게] 를 만들 때,  상속해서 그 속성을 쓸 수 있다. 불필요한 코드를 줄여서, 효율적으로 코딩할 수 있다.




[1] 부모클래스(4가지 변수)를 만들고 자식클래스(3가지변수 + 부모 4가지 변수)에서 상속해보자.


1. 사람의 특징을 가진 [Person]클래스를 만든다.( private 필드 -> getter/setter -> 생성자 -> 그외 매쏘드 순)

(1) 각각 private로 필드들을 만든다. 

(2) 보안private필드에 접근할 수 있는 get/set()매쏘드를 만든다.(이번에는 한번에 만들 수 있는 자바기능을 이용한다)

  *** 클래스 내부에서 우클릭 > [ Source ]  >  [ Generate getter / setter ]

  cf) 외부에서 꺼내쓰는 int get() / 내부에 입력하는 void set(int x)


(3) 각 필드(private 필드=멤버변수)에 대한 생성자를 만든다.  우클릭 > source > Generate Constructor using Field

 *** 이 때 super()라는 것은, 부모클래스의 생성자를 호출해서 초기화 시키겠다는 의미이다. 

       그러나, Person은 가장 상위 클래스로, 아직 상속한 부모클래스가 없기 때문에, 비어있다.


public class Person {

private String name;

private int age;

private int height;

private int weight;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public int getHeight() {

return height;

}

public void setHeight(int height) {

this.height = height;

}

public int getWeight() {

return weight;

}

public void setWeight(int weight) {

this.weight = weight;

}

public Person(String name, int age, int height, int weight) {

super();

this.name = name;

this.age = age;

this.height = height;

this.weight = weight;

}


}


2. Person이라는 클래스를 상속하는 Student클래스를 만들자.

(1) 클래스를 만들고, extends Person 으로 상속하자.

(2) 학생클래스에 필요한 필드를 만들어주자.

(3) getter/setter를 만들고

(4) 생성자를 만들어주자. 이때, Student클래스에 만든 필드들 이외에, 

    상속한 Person클래스의 필드(name, age, height, weight)들까지 입력되어있다.*******

 - 개발의 편의성을 위해, 자신이 상속한 부모클래스의 필드들까지 한꺼번에 초기화 해주기 위한 것이다.

 - super( 파라미터)부모가 가진 생성자를 호출해서, 초기화 한다는 의미이다.****


public Student(String name, int age, int height, int weight, String studentID, int grade, double gPA) {

super(name, age, height, weight);

this.studentID = studentID;

this.grade = grade;

GPA = gPA;

}

(5) 이제 추가적으로 Student클래스 내부에 show() 라는 매쏘드도 만들어주자. 출력시 get변수명()으로 꺼내쓰자.

  *** 이때 Person클래스 내부 필드인 name을 getName()할 때는, 상속받은 상태이므로 Person.getName()이 아니라 getName()으로 바로 사용할 수 있다.

public void show() {

System.out.println("-----------------------------");

System.out.println("학생 이름 : " + getName());

System.out.println("학생 나이 : " + getAge());

System.out.println("학생 키 : " + getHeight());

System.out.println("학생 몸무게 : " + getWeight());

//위에는 상속받은 Person클래스의 매쏘드를 바로 사용함

System.out.println("학생 학번 : " + getStudentID());

System.out.println("학생 학년 : " + getGrade());

System.out.println("학생 학점 : " + getGPA());

System.out.println("-----------------------------");

}



3. 이제 메인클래스를 만들고 메인함수에서 객체를 만들고, show()매쏘드를 호출해보자.



public class Main {


public static void main(String[] args) {


Student student1 = new Student("조재성", 32, 163, 55, "1111048", 3, 4.1);

Student student2 = new Student("김석영", 31, 167, 47, "1311051", 3, 3.8);

student1.show();

student2.show();

}


}


4. 출력물을 확인해보자.

-----------------------------

학생 이름 : 조재성

학생 나이 : 32

학생 키 : 163

학생 몸무게 : 55

학생 학번 : 1111048

학생 학년 : 3

학생 학점 : 4.1

-----------------------------

-----------------------------

학생 이름 : 김석영

학생 나이 : 31

학생 키 : 167

학생 몸무게 : 47

학생 학번 : 1311051

학생 학년 : 3

학생 학점 : 3.8

-----------------------------


[2] 또하나의 클래스를 만들고 출력해보자. 


1. Teacher클래스를 만들고, extends Person을 해보자.

(1) 3가지 private필드를 만들고 -> 외부에서 접근할 수 있는 public 겟셋터 -> 생성자까지 만들자.

(2) show()함수를 만들어서 3+ 부모4 총 7가지 변수를 출력해주자.


2. 메인클래스 메인함수로 가서, Teacher객체를 만들면서 초기화해주고, 출력도 해보자.

Teacher teacher1 = new Teacher("이숭인", 38, 171, 55, "0000000", 400, 5);

teacher1.show();

------------------

교사 이름 : 이숭인

교사 나이 : 38

교사 키 : 171

교사 몸무게 : 55

교직원 번호 : 0000000

교사 월급 : 400

교사 연차 : 5

------------------



[3]배열을 이용해서 많은 객체들을 관리해보자.


1. Student클래스 객체100개를 배열로 생성하자.

 *** 객체배열을 만들때는, 생성자호출이 아니므로 new Student() [ 배열 ] ; 이 아니라, new Student[ 배열 ]; 로 우항을 적는다.  

     생성자로 초기화하는 것은 따로 해줄 것이다.


Student[] students = new Student[100];


2. for문을 이용해서 100명의 학생들을 모두 [ 생성자를 이용한 초기화 ]를 한번해 해주자. 대신 학번만 다르게 주자.

- 학번은 숫자가 하나의 단어로 인식되는 String 문자열이다. index인 i를 쓰더라도 뒤에 [ + "" ] 로 끝나야한다.( i + "" )


for(int i=0;i<100;i++) {

students[i] = new Student("홍길동 "+i+"번째", 20, 175, 70, i + "" , 1, 4.5 );

students[i].show();

}



3. 출력값 


for(int i=0;i<100;i++) {

students[i] = new Student("홍길동 "+i+"번째", 20, 175, 70, i + "" , 1, 4.5 );

students[i].show();

}



[4] Scanner로 실제 입력을 받아서 객체를 초기화하여, 출력해주자.

1. Scanner 변수를 생성해서, 콘솔창에서 총 학생수를 입력받고, 그 숫자로 배열을 만들자.


Scanner sc = new Scanner(System.in);

System.out.print("총 몇명의 학생이 존재합니까?(배열수) : ");

int number = sc.nextInt();


2. for문을 만들고, 각 학생들마다 입력받을 정보들을 Student클래스의 생성자의 파라미터에서 복사해와서 가져온 뒤

   임시적으로 변수로 선언하여 받은 다음, 생성자로 초기화 해준다.

< 객체 생성시, 생성자로 초기화해줄 파라미터는, 클래스의 생성자부분의 파라미터를 복사해와서 편하게 작성할 수 있다>


(1) Student 클래스에서 생성자의 파라미터에 각 변수들을 복사해오자

public Student(String name, int age, int height, int weight, String studentID, int grade, double gPA)


(2) 그것을 for문 안에 변수선언으로서 수정하자.


for(int i = 0 ; i <number ; i++) {

String name;

int age;

int height;

int weight;

String studentID;

int grade;

double gPA;


}

(3) 출력문 + sc.nextInt() 등 7가지를 만들어서, 각 변수에다 대입해준다.

 *** 이때, String은 sc.nextString()이 아니라 , sc.next()이다! / double 은 sc.nextDouble()


for(int i = 0 ; i <number ; i++) {

String name;

int age;

int height;

int weight;

String studentID;

int grade;

double gPA;


System.out.print("학생의 이름을 입력하세요 : ");

name = sc.next();

System.out.print("학생의 나이를 입력하세요 : ");

age = sc.nextInt();

System.out.print("학생의 키를 입력하세요 : ");

height = sc.nextInt();

System.out.print("학생의 몸무게를 입력하세요 : ");

weight = sc.nextInt();

System.out.print("학생의 학번을 입력하세요 : ");

studentID = sc.next();

System.out.print("학생의 학년을 입력하세요 : ");

grade = sc.nextInt();

System.out.print("학생의 학점을 입력하세요 : ");

gPA = sc.nextDouble();

}


(4) 입력받은 값을 가진 변수들을 이용해서, 생성자를 호출하여 각 배열[i]에 new Student(~ , , , ,~)로 초기화해준다.

*** Student 클래스의 파라미터를 다시 복사해 온 뒤, 자료형을 다 지워주면 쉽게 생성자호출을 할 수 있따.


my) 생성자의 파라미터에 Model타입에 직접 값을 입력해주는 것이 아니라, 생성자의 변수명과 똑같은 변수를 선언한 뒤, 입력받아서 변수에 넣고,

      생성자의 파라미터를 활용해서 자료형만 지워주면, 바로 대입하는 식을 만들 수 있다.


students[i] = new Student(name,age,  height,  weight,  studentID, grade, gPA);



3. 출력도 for문을 써서 show()로 출력해준다.


for(int i = 0; i < number ; i++) {

students[i].show();

}



4. 출력값을 보자.


총 몇명의 학생이 존재합니까?(배열수) : 3

학생의 이름을 입력하세요 : 조재성

학생의 나이를 입력하세요 : 20

학생의 키를 입력하세요 : 19


-----------------------------

학생 이름 : 조재성

학생 나이 : 20

학생 키 : 19

  1. 박카스 2019.02.15 16:10

    혹시 안드로이드에서도 상속이 쓰이나요??

    혹시 안된다면 xml이 없는 class에서도 startactivity를 할 수 있는 지 여쭤 보고 싶어요

    • nittaku 2019.02.15 16:34 신고

      안드에서 상속을 쓰려고 공부했어요. 함수에 추가 기능을 넣을때요. 근데 제가 한 개인프로젝트에서는 못써봤어요!

    • nittaku 2019.02.15 16:36 신고

      안드가 현재는 코틀린으로 가고있으나 자바입니다. 다 가능합니다!

  2. ㅇ_ㅇ 2021.09.03 17:29

    잘 봤습니다. 감사합니다.

+ Recent posts