상속 및 다태성 - [OOP 및 Java#2]
11159 단어 computerscienceoopjava
요점을 요약하여 다시 말하다.
추상을 논하는 것은 우리가 장애의 개념을 논해야 한다는 것을 의미한다.클라이언트와 실현자라는 두 역할 간의 장애로 인해 우리는 추상적이고 봉인되었다.
클라이언트가 실현자를 호출하기 위해서는 먼저 이 실현자를 만들고 신뢰할 수 있도록 해야 한다.이것은 클라이언트 코드가 실현자 코드에 의존한다는 것을 의미한다.또한 구현자는 데이터/기능 추상화 및 패키지/정보를 통해 클라이언트에 숨겨진 내용을 숨길 수 있다.나는 이것이 우리에게 결코 이상하지 않다고 생각한다.일상생활에서 우리는 모두 고객이다.우리가 사용하는 전자 설비는 대부분 심리적 블랙박스로 여겨진다.우리는 이 표지들 뒤에 무슨 일이 일어났는지 모른다.그러나 우리는 그것들이 믿을 만하다고 믿는다. 우리는 충분한 정보만 알면 그것을 사용할 수 있다고 믿는다. 우리는 이것에 대해 칭찬을 표한다.
유산
계승은 대상을 대상으로 프로그래밍하는 데 있어서 모두가 알고 있는 사상이다.그것은 두 대상 간의 관계를 주목하는데, 그 중 하나는 다른 대상이다.예를 들어 자동차는 일종의 교통수단이다.따라서 자동차 대상류는 자동차 대상류에서 계승할 수 있다.이것은 요구가 아니라 설계 원칙이다.본질적으로 객체 지향 원칙은 다음과 같은 목표를 실현하고자 한다.
Where similar functions are carried out by distinct pieces of code, it is generally beneficial to combine them into one by abstracting out the varying parts.
- Benjamin C.Pierce
우리 예를 하나 봅시다.
종이의 크기와 색깔을 설명하기 위해 종이 대상을 원한다고 가정하십시오.
class Paper{
private int height;
private int width;
private String color;
Paper(int height, int width, String color){
this.height= height;
this.width = width;
this.color = color;
}
}
현재 표준 기본 인쇄지 (일반적인 A4 크기의 종이) 가 필요하다면 세 가지 방법이 있다.Paper PrinterPaper(){
return new Paper(297, 210, "white");
}
class Paper{
private int height;
private int width;
private String color;
// original
Paper(int height, int width, String color){
this.height= height;
this.width = width;
this.color = color;
}
// added, will be called if no parameters are given
Paper(){
this.height= 297;
this.width = 210;
this.color = "white"
}
}
class PrinterPaper extends Paper{
PrinterPaper(){
super(297,210,"white");
}
}
우리는 상속은 단지 일하는 방식의 하나일 뿐이라는 것을 볼 수 있다.그것은 보통 대상 사이에 명확한 is-a 관계가 존재할 때 작용한다.PrinterPaper를 구성하는 세 가지 방법을 비교한 결과, 세 번째 방법은 코드 크기가 상대적으로 짧고 코드 조직에 도움이 되는 것 같다.다태성
Of many forms
자바에서, 특히 계승에 있어서, 우리는 공유 기능에 대한 코드 중복을 피하기를 바란다.그러나 코드를 수정해야 합니다.이런 수요는 통상적으로 새로운 종류를 만들 때 고유한 것이다.만약 없다면, 우리는 우선 어떤 의미 있는 것도 분리해 내지 않을 것이다.
계승된 상황에서 우리는 부류와 자류 간에 코드를 공유하도록 지정하지만 자류에서도 두 가지 주요 차이가 있을 수 있다.
Java에는 자주 다시 쓰는 두 가지 방법이 있습니다.
equals 방법에 대한 설명:
// using the Paper example
@override
public boolean equals(Object obj){
if(this == obj){
return true; // if exact same copy
} else if (obj instanceof Paper){
// if belongs to the same class
Paper p = (Paper) obj; // IMPT! type-cast before you can use the
// Paper class methods
return this.height == p.height && this.width == p.width
&& this.color.equals(p.color);
} else { // not even of the same class
return false;
}
}
toString 방법은 이해하기 쉽다.선택한 속성에 따라 인쇄할 문자열을 포맷하기만 하면 됩니다.그것은 동적일 필요가 없다.문자열만 되돌려주면 작동합니다.@override
public String toString() {
return this.color + " paper of size: " + this.height + " " + this.width;
}
방법 서명은 반드시 완전히 같아야만 다른 방법을 덮어쓸 수 있음을 일깨워 주십시오.이 방법의 헤더가public boolean equals(Object obj){
//...
}
같은 제목을 사용해야 합니다.따라서 클래스 객체를 자신의 클래스 객체로 대체하는 것은 불가능합니다.// Example of a wrong way to override
@override
public boolean equals(Paper p){
//...
}
//This is wrong
일반적으로 반환 형식은 한 방법이 다른 방법을 다시 쓰기 위해 같다.그러나 받아들일 수 있는 상황에서 반환 유형은 아버지 방법보다 구체적이다(반대가 아니다!).이것은 대체성 원칙에 따라 자류는 반드시 모든 방면에서 부류의 기대를 만족시켜야 하기 때문에 작용할 것이다.따라서 더 구체적인 대상은 더 일반적인 대상(부 대상)을 사용하는 모든 클라이언트 코드와 함께 작동합니다.나는 다음 문장에서 이것에 대해 상세하게 논술할 것이다.Reference
이 문제에 관하여(상속 및 다태성 - [OOP 및 Java#2]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tlylt/inheritance-and-polymorphism-oop-java-2-d8g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)