우리는 객체지향의 세 가지 주요 특징이 캡슐화, 상속, 다형성이라는 것을 알고 있습니다. 그러나 때때로 우리는 이러한 개념에 대해 항상 혼란스러워합니다. 이러한 개념은 미래의 추상화 지향 프로그래밍을 위한 견고한 기반을 마련하기 위해 아래에 정리되어 있습니다.
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의 세 가지 주요 기능: 캡슐화, 상속 및 다형성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

드림위버 CS6
시각적 웹 개발 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
