> Java > java지도 시간 > Java의 세 가지 주요 기능: 캡슐화, 상속 및 다형성

Java의 세 가지 주요 기능: 캡슐화, 상속 및 다형성

angryTom
풀어 주다: 2019-07-17 08:41:10
원래의
2874명이 탐색했습니다.

 우리는 객체지향의 세 가지 주요 특징이 캡슐화, 상속, 다형성이라는 것을 알고 있습니다. 그러나 때때로 우리는 이러한 개념에 대해 항상 혼란스러워합니다. 이러한 개념은 미래의 추상화 지향 프로그래밍을 위한 견고한 기반을 마련하기 위해 아래에 정리되어 있습니다.

 

encapsulation의 개념은 여전히 ​​이해하기 쉽습니다. 클래스를 정의할 수 있다면 캡슐화의 개념을 완전히 이해하신 것입니다. 아래에 정의된 클래스는 데이터를 캡슐화한 것입니다.  

상속의 장점은 코드 재사용입니다. 상속된 하위 클래스는 자동으로 상위 클래스의 모든 속성과 메서드를 갖습니다. 따라서 기존 클래스를 상속한다는 것은 이러한 클래스의 메서드와 필드를 재사용하는 것을 의미합니다. 이를 바탕으로 서브클래스는 새로운 요구 사항을 충족하기 위해 몇 가지 새로운 메서드와 필드를 추가할 수도 있습니다. 이는 Java 프로그래밍의 핵심 기술입니다.

 그럼 상속이 필요한지 어떻게 판단하나요? "is-a" 관계는 상속의 명백한 특징입니다. 이 문장의 의미는 다음과 같이 해석할 수 있습니다. Student가 Person을 상속받는 이유는 Student가 Person이기 때문입니다. 그러한 관계가 없다면 상속이 필요하지 않습니다. 이는 Liskov 대체 원칙의 정의이기도 하며, 하위 유형은 상위 유형을 대체할 수 있어야 합니다.

  슈퍼클래스를 확장하여 서브클래스를 정의할 때 서브클래스와 슈퍼클래스의 차이점만 지적하면 됩니다. 따라서 클래스를 설계할 때 일반 메서드는 슈퍼 클래스에 배치하고 특수 목적을 가진 메서드는 하위 클래스에 배치해야 합니다. .

  동적 바인딩에는 매우 중요한 기능이 있습니다. 기존 코드를 수정하지 않고도 프로그램을 확장할 수 있습니다. 따라서 다형성은 개방형 및 폐쇄형 원리의 기초입니다.

  다음은 상속 및 다형성 구현의 구체적인 예입니다.

abstract는 추상 키워드입니다. (구체 클래스보다 추상 클래스에서 상속하는 것이 더 좋습니다.)

public abstract class Person {  // 抽象类
    private String name;  // 私有变量
    
    public String getName() {  // Getter方法
        return name;
    }    public void setName(String name) {  //Setter方法
        this.name = name;
    }        
    public Person(String name) {  // 构造函数,用于初始化name
        super();        this.name = name;
    }    public abstract String getDesc();  // 抽象类中的抽象方法。  只有声明,没有具体实现。
        public String toString(){      // toString方法覆盖了Object类的toString方法
         return name + getDesc();
      }

}
로그인 후 복사

Extensions는 상속된 키워드입니다. Student는 Person을 상속하므로 Student에는 name 속성이 있습니다.

public class Student extends Person {  // 继承类
    private String major; // 新增加的数据    

    public String getMajor() {        return major;
    }    public void setMajor(String major) {        this.major = major;
    }    

    public Student(String name,String major) { // 构造函数用于初始化
        super(name);   // 调用超类构造函数
        this.major = major;
    }

    @Override    public String getDesc() {  // 必须实现超类中的抽象方法        // TODO Auto-generated method stub
        return " : a student, major is " + major;
    }
로그인 후 복사

슈퍼클래스를 상속하는 모든 하위 클래스는 어떤 구현 방법에 관계없이 슈퍼클래스에 정의된 추상 메서드를 구현해야 합니다.

public class Employee extends Person{
    private double salary;
    public double getSalary() {
        return salary;
    }public void setSalary(double salary) {
        this.salary = salary;
    } 
   public Employee(String name, double salary) {
       super(name);
       this.salary = salary;
    }

    @Override
    public String getDesc() {        // TODO Auto-generated method stub
        return " :a employee, salary is " + salary;
    }
}
로그인 후 복사
public class Test {    public static void main(String[] args) {        // TODO Auto-generated method stub
        Person[] p=new Person[2];    
        p[0]=new Student("Mark", "IT");
        p[1]=new Employee("Jerry", 2000);        for (Person person : p) {
            System.out.println(person.getName()+person.getDesc());
        }
    }

}
로그인 후 복사
실행 결과

이 예에서도 캡슐화 없이는 상속이 없고, 상속 없이는 소위 다형성이 없다는 것을 알 수 있습니다.

캡슐화, 상속 및 다형성(특히 다형성)을 이해하는 것은 디자인 패턴을 이해하는 기초입니다.

Java의 세 가지 주요 기능: 캡슐화, 상속 및 다형성Java 튜토리얼에 대해 자세히 알아보려면 다음을 방문하세요.

Java Tutorial

위 내용은 Java의 세 가지 주요 기능: 캡슐화, 상속 및 다형성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿