계승 과 조합 에 대하 여

13160 단어 공부 하 다.Javva
자바 에 서 는 코드 의 재 활용 이 상당히 중요 하지만 안 될 뿐 더 많은 것 을 실현 할 수 있 습 니 다.현재 일반적으로 사용 하 는 방법 은 두 가지 가 있 는데 그것 이 바로 계승 과 조합 이다.
4.567917.계승 이라는 것 은 대체적으로 익숙 하 다.유형 을 만 들 때 계승 과 관련된다.특정한 유형 을 명시 적 으로 계승 하 든 아래 의 코드 를 보 세 요
class Person{
    protected  String name;
    protected  int age;
    public Person(){}
    public Person(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println("class Person.");
    }
}
class Student extends Person{
    public Student(){}
    public Student(String name,int age){
        super(name,age);
        System.out.println("class Student.");
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class Test {
    public static void main(String[] args){
        Student s = new Student("   ",20);
        System.out.println(s);
    }
}
//  :
//class Person.
//class Student.
//Student{name='   ', age=20}

이렇게 하면 Student 는 필요 없 이 기본 Person 의 속성 을 가 질 수 있 습 니 다.이런 상황 에서 Student 는 Person 의 하위 대상 을 가 진 것 처럼 이 하위 대상 을 사용 하여 Person 과 관련 된 속성,동작 을 조작 할 수 있 습 니 다.전 제 는 Student 가 이런 것들 을 조작 할 권리 가 있다 는 것 입 니 다.
4.567917.이 물건 을 조합 하 는 것 이 더욱 간단 합 니 다.재 활용 이 필요 한 유형의 인용 을 새로운 클래스 에 두 고 새로운 유형의 도 메 인 변수 로 사용 하면 됩 니 다
class Person{
    private String name;
    private int age;
    public Person(){
        System.out.println("class Person.");
        name = "   ";
        age = 20;
    }

    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;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
class Student{
    public Person p = new Person();
    public Student() {
        System.out.println("class Student.");
        System.out.println(p);
    }
}
public class Test {
    public static void main(String[] args){
        Student s = new Student();
    }
}
//  :
//class Person.
//class Student.
//Person{name='   ', age=20}

위의 코드 에서 Student 류 는 Person 의 대상 을 직접 사용 하여 조작 합 니 다.이것 은 계승 과 매우 비슷 하지만 하 나 는 명시 적 이 고 하 나 는 암시 적 입 니 다.
그럼 우 리 는 어떤 방식 을 선택해 야 합 니까?
계승 에서 기본 클래스 와 도 출 류 의 관 계 는 is-a(무엇 입 니까)의 관계 에 해당 합 니 다.예 를 들 어 Person 은 인류 이 고 Student 는 학생 이 며 학생 은 한 사람 이 며 사람과 관련 된 속성 과 동작 을 가지 고 있 습 니 다.이것 은 바 꿀 수 없습니다.그러나 학생 은 한 사람 뿐만 아니 라 한 학생 이기 도 하고 학생 을 제외 한 다른 속성,동작,예 를 들 어 성적,숙제 등 을 가지 기 때문에 이것 은 계승 을 통 해 실현 할 수 있다.사람 을 바탕 으로 학생 의 속성 과 동작 을 증가 시 켜 도 출 류 Student 를 실현 할 수 있다.
그리고 조합 은 has-a 관계,즉 무엇 을 가지 고 있 는 지 에 해당 합 니 다.예 를 들 어 지금 은 제 가 혼자 입 니 다.저 는 외출 이 필요 합 니 다.하지만 걷 고 싶 지 않 습 니 다.저 는 제 가 운전 할 수도 있 고 버스 를 탈 수도 있 습 니 다.이런 것들 이 바로 제 가 사용 하 는 도구 입 니 다.저 는 이런 것들 을 가 져 갈 수 있 습 니 다.사람 을 가지 고 어떤 교통수단 을 물 려 받 는 것 이 아니 라?

좋은 웹페이지 즐겨찾기