본문 바로가기

Java

Day06

1. 객체의 배열
    클래스이름 참조변수 =new 클래스이름[요소의갯수];
   ex)
   데이터타입(int) [] arr =new int[3];             //배열
     x arr[0] =10;
   Student[] arr = new Student[3];              //배열만든것 student가 저장할공간 3개를 만든것 객체 아직x!!             //배열을 객체 찍어 저장

                                                                                                    //arr==참조변수        3개를 만들 배열을 저장

   객체만들기(Student)
   Student[] arr = new Student[3];                                                        //배열3개를 만들어서 0 1 2 arr변수가 배열 가리킴 ->
   ★arr[0] = new Student();                 //객체의0번방에 객체찍음  //배열의0번째방에 객체찍음
   arr[0].setNo(1);                                                                               //0번방 0번
   arr[0].setName("김사과");                                                                        //0번방 1번
   ....

   arr[1] = new Student();
   arr[1].setNo(2);
   arr[1].setName("이메론");
   ...
2.Object 클래스(모든클래스가 object를 상속받고있다)
   - java.leng.Object
   -모든 클래스의 최상위 클래스
   -모든 클래스는 Object 클래스의 메소드를 사용할 수 있고, 일부 메소드를 오버라이딩해서 사용
   -Object 클래스가 들어있는 java.lang 패키지는 컴파일러에 의해 자동으로 import됨

   toString()                                                                               //다른기능으로 바꿔쓰기            //상속 오버라이딩 부모상속 싫을때 사용
   -객체의 해시코드(주소) 출력
   -패키지명.클래스명@해시코드
   -getClass().getName() : 패키지명 + 클래스명
   -Integer.toHexString(hashcode()) : 해시코드                                                  //가상주소값 뽑아낼때 사용
   -객체의 정보를 문자열 형태로 표현하고자 할 때 오버라이딩을 자주 하는 편

   eqauls()                         /////////////
   -객체의 값이 같은지 연산

   clone()
   -객체를 복사본을 만듬
   -clone()은 객체를 복제할 때 private 필드도 복제하기 때문에 객체지향 프로그래밍은 은닉화에 위배

3.상속
-특정 클래스를 구성할 때 기존 클래스의 데이터와 메소드를 부모클래스에서
 그대로 물려받아 중복적인 코드를 줄이는 것
-하나의 변수 타입으로 여러 종류의 객체를 의미하는 추상화된 방식의 프로그램을 가능하게 해줌                         //오버라이딩 내클래스에서 부모클래스를 덮어쓰거나 수정
                                  (상속할 클래스)
-자식클래스(subclass): 상속을 받는 클래스
-부모클래스(parent,super class):상속을 해주는 클래스


    접근제어자 class 클래스명 extends 부모클래스명 {
     }

4.업캐스팅과 다운캐스팅
-캐스팅(casting): 형변환 타입을 변환하는 것=>형변환
-자바의 상속 관계에 있는 부모와 자식 클래스 간에는 서로 간의 형변환이 가능
-업캐스팅: 자식 클래스가 부모 클래스로 형변환되는것
-다운캐스팅: 부모클래스타입에서 다시 자식클래스로 복구시키는 것(원상태로 돌리는것)
ex)
    class person{
        String name;
        person(){}
        Person(String name){
        this.name = name;
        }
    }
    class Student extends Person{
        String no;  //자식에서 만든 변수
    }

    public class Main{
    public static void main(String[] args){
        Student student = new Student();        //name(o),no(o)
        Person person = student;                //업캐스팅 student객체 가 person형태로
        person.name ="김사과";   (o)
        person.no =10;          (x)             //자식에서 만든 거 사용x?
    }
    }

    public class Main{
    public static void main(String[] args){
      Person person = new Student();        //처음부터 업캐스팅해서 person이 값을 가짐              why?  "객체를 다양하게"다형성 부모꺼만 받기 부모가 마음에 안들면 오버라이딩해서 새롭게 만들수 o
      Student student = new Person();       //(x)                                               why?    같은이름의 메소드를 오버라이딩이 가능    //자식은 부모를 모름 ,부모는 상속해주는 자식을 안다.
                                                                                                         //틀은 같은데 내용을 다르게하기위해
      다운캐스팅
      Student student = (Student)person;        (타입형변환하는)
      student.name ="김사과"; (o)
      student.no =1; (o)

 }
        }


5.instanceof 연산자
-부모를 상속해서 만들어진 자식객체가 여러 타입인경우에
   특정 클래스가 맞는지 확인하기 위해 사용하는 메소드
-참조변수가 참조하고 있는 인스턴스(객체)의 실제 타입을 알아보기 위해 사용
-연산 결과는 boolean 값으로 반환

    참조변수 instanceof 클래스명      클래스 관계판별할때 사용                                                 (연관성 있다 없다)
     업캐스팅,다운캐스팅이든 true                                                                            자바는  다중상속x

과제.
Student 클래스를 만들어 아래와 같은 프로그램을 만들어보자.
(단, 출력은 toString()을 오버라이딩해서 작성)                                  //toString 오버라이딩,  배열사용
몇 명의 학생을 등록할까요? ex)3 입력

1번째 학생의 번호를 입력하세요.1
1번째 학생의 이름을 입력하세요.김사과
1번째 학생의 국어점수를 입력하세요.100
1번째 학생의 영어점수를 입력하세요.80
1번째 학생의 수학점수를 입력하세요.90
2번째 학생의 번호를 입력하세요.2
....

3번째 학생의 수학점수를 입력하세요. 100

학생리스트
번호:1, 이름:김사과, 국어점수:100, 영어점수:80,수학점수:70,총점:250점, 평균:82
번호:2, 이름:김사과, 국어점수:100, 영어점수:80,수학점수:70,총점:250점, 평균:82
번호:3. 이름:김사과, 국어점수:100, 영어점수:80,수학점수:70,총점:250점, 평균:82

                                                                                                                            //12상속받은 학생 12에 3번기능추가      학생 업캐스팅하면 12만쓸수있음

                                                                                                                            학생 1  2   3

                                                                                                                                1  1   1
                                                                                                                                2  2   2
                                                                                                                           기능만 바꿔서(오버라이딩)

변수->생성자->g

 

'Java' 카테고리의 다른 글

Day06 - 02  (0) 2023.02.01
Day06 - 01  (0) 2023.02.01
Day05 - 4  (0) 2023.02.01
Day5 - 03  (0) 2023.01.29
Day5 - 01(Method)  (0) 2023.01.29