>  기사  >  Java  >  Java 추상 클래스 및 인터페이스를 정의하고 사용하는 방법

Java 추상 클래스 및 인터페이스를 정의하고 사용하는 방법

WBOY
WBOY앞으로
2023-05-05 19:43:051477검색

1. 객체 비교

두 객체를 비교하기 전에 무엇을 기준으로 비교할 것인지 먼저 결정해야 합니다. 객체에는 멤버 변수가 너무 많아서 직접 비교가 불가능합니다.

1.1 비교 가능

< ;T> ;은 비교할 객체의 유형으로 채워지는 인터페이스의 매개변수입니다. 이 인터페이스에는 CompareTo 추상 메소드가 하나만 있으며 구조는 다음과 같습니다. 크기 비교

1.2 Comparator

이 인터페이스에는 객체 간의 크기를 비교하는 데에도 사용되는 추상 메서드 비교가 있습니다. 메서드의 구조는 다음과 같습니다. Java 추상 클래스 및 인터페이스를 정의하고 사용하는 방법

인터페이스 간의 차이점은 다음과 같습니다. Comparator 인터페이스는 Arrays 클래스에서 정렬 메소드의 매개변수로 사용될 수 있습니다.

Java 추상 클래스 및 인터페이스를 정의하고 사용하는 방법

Java 추상 클래스 및 인터페이스를 정의하고 사용하는 방법요소가 클래스인 배열인 경우 Comparator 인터페이스를 사용하여 배열을 추가로 정렬할 수 있습니다.

2.Clone Object

2.1 Cloneable

Java 추상 클래스 및 인터페이스를 정의하고 사용하는 방법이 인터페이스는 빈 인터페이스이지만 복제하려면 클래스에서 이 인터페이스를 구현해야 하며, 다시 작성해야 하는 메소드는 Object 클래스의 clone() 메소드입니다.

clone은 IDEA에서 자동으로 다시 작성되는 () 메서드는 다음과 같습니다.

throws 및 다음 문은 지금 초점이 아니므로 지금은 건너뜁니다.

이 메서드의 반환 값은 Object 클래스이므로 기억하세요.

2.2 Deep Copy와 Shallow Copy

Java 추상 클래스 및 인터페이스를 정의하고 사용하는 방법Cloning에 대해 이야기하고 있으니 Deep Copy와 Shallow Copy 두 가지의 개념에 대해 간단히 이야기해 보도록 하겠습니다.

가정해 보겠습니다. A의 내용이 B에 복사된 다음 B 콘텐츠의 내용을 수정합니다. A의 내용이 변경되지 않은 경우 깊은 복사본이고, 그렇지 않으면 얕은 복사본입니다

설명해야 합니다. 복제 방법은 깊은 복사본이거나 얕은 복사본은 클래스의 멤버 변수 및 작성하는 코드와 관련이 있습니다. 두 개의 서로 다른 클래스는 동일한 복제 방법을 사용합니다. 하나는 깊은 복사본이고 다른 하나는 얕은 복사본입니다. .이런 상황이 존재합니다

이제 다음과 같은 클래스가 있습니다.

class A implements Cloneable{
    int i;
    int j;
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    @Override
    public String toString() {
        return "{" +
                "i=" + i +
                ", j=" + j +
                &#39;}&#39;;
    }
}

메인 메서드에서 이를 인스턴스화하고 다른 개체에 복제합니다. 결과를 살펴보세요.

현재 a는 변경되지 않았습니다. b를 변경하면 clone()은 deep copy

클래스 A를 변환합니다:

class B implements Cloneable {
    int k;
}
class A implements Cloneable{
    int i;
    int j;
    B c=new B();
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    @Override
    public String toString() {
        return "{" +
                "i=" + i +
                ", j=" + j +
                ", c.k=" + c.k +
                &#39;}&#39;;
    }
}

결과는 다음과 같습니다.

Java 추상 클래스 및 인터페이스를 정의하고 사용하는 방법

그럼 이때 클론은 deep copy인가요,shallow copy인가요?

이 결과가 나오는 이유는 메모리에 따라 다릅니다. Class A가 수정되기 전의 메모리는 다음과 같습니다.

Java 추상 클래스 및 인터페이스를 정의하고 사용하는 방법

Class A의 수정된 메모리는 다음과 같습니다.

위 그림에 따르면, Deep Copy를 달성하려면 클래스 B 콘텐츠의 또 다른 복제가 필요하므로 복제 방법을 수정해야 합니다Java 추상 클래스 및 인터페이스를 정의하고 사용하는 방법

class B implements Cloneable {
    int k;
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
class A implements Cloneable{
    int i;
    int j;
    B c=new B();
    @Override
    protected Object clone() throws CloneNotSupportedException {
        A tmp=(A)super.clone(); 
        tmp.c=(B)this.c.clone();
        return tmp;
    }
    @Override
    public String toString() {
        return "{" +
                "i=" + i +
                ", j=" + j +
                ", c.k=" + c.k +
                &#39;}&#39;;
    }
}

직접 그림을 그리려는 이유에 대해서는 여기서 다루지 않겠습니다Java 추상 클래스 및 인터페이스를 정의하고 사용하는 방법

3 . Object 클래스

Object 클래스 여기에는 일반적으로 사용되는 몇 가지 메서드가 있습니다.

Java 추상 클래스 및 인터페이스를 정의하고 사용하는 방법3.1 equals

Object 클래스에서 이 메서드는 크기를 비교하는 데 사용됩니다. 기본 구현 논리는 다음과 같습니다. :

public boolean equals(Object obj) {
    return (this == obj); 
}

"=="에 대해서, 양쪽의 변수가 기본형 변수이면 값이 같은지 비교하고, 참조형 변수이면 주소가 같은지 비교합니다.

3.2 toString

output 문 System.out.println() 기본 호출은 toString 메서드이지만 출력이 참조형 데이터인 경우 기본적으로 수정된 주소가 출력되므로 이때 다시 작성해야 합니다. 이것이 바로 위의 예에 toString 메소드가 있는 이유입니다

위 내용은 Java 추상 클래스 및 인터페이스를 정의하고 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제