대상을 향한 4대 특성부터 말하자면

대상지향(OOP)의 특성에 대해 말하자면 많은 사람들이 먼저 봉인, 계승과 다태를 생각했다. 사실 위키백과의 해석에서'추상화'도 포함되어야 한다. 자연히 본고의 제목은'대상지향의 4대 특성부터 말하자면'으로 바뀌었다.충분한 체계적인 묘사를 위해 기본 개념에 대한 묘사는 대부분 위키백과에서 나온다.
무엇이 봉인입니까?봉인은 클래스의 필드를 사유화하고 공유 방법을 통해 사유 필드에 접근할 수 있도록 하는 기술이다.하나의 필드가 개인으로 성명되면, 클래스의 외부에 접근할 수 없으며, 클래스 내부의 필드를 숨깁니다.이 때문에 봉인은 때때로 데이터 숨김이라고도 부른다.
봉인은 코드와 데이터가 클래스 밖으로 정의된 다른 코드가 임의로 접근하는 것을 보호할 수 있는 장벽으로 여겨질 수 있다.접근 데이터와 코드는 하나의 인터페이스로 엄격하게 제어된다.봉인의 주요 장점은 우리가 실현한 코드를 수정하는 것이지 다른 사람들이 우리의 코드를 사용하는 것을 파괴하지 않는다는 것이다.봉인된 이 특성은 우리의 코드를 유지보수성, 유연성, 확장성을 가지게 한다.
패키지 클래스의 속성 또는 메소드 패키지 속성:
private         

포장 방법:
private            (  )

예:
/* File name : EncapTest.java */
public class EncapTest{
    private String name;
    private String idNum;
    private int age;
    public int getAge(){
        return age;
    }
    public String getName(){
        return name;
    }
    public String getIdNum(){
        return idNum;
    }
    public void setAge(int newAge){
        age = newAge;
    }
    public void setName(String newName){
            name = newName;
    }
    public void setIdNum(String newId){
        idNum = newId;
    }
}

공유 방법은 클래스 밖에서 클래스 내 필드에 접근하는 입구입니다.일반적인 경우, 이러한 방법은 getters와setters로 정의됩니다.따라서 클래스 내 변수에 접근하려면 getters와setters 방법을 사용해야 합니다.
EncapTest 클래스의 변수는 다음과 같이 액세스할 수 있습니다.
/* File name : RunEncap.java */
public class RunEncap{
    public static void main(String args[]){
        EncapTest encap = new EncapTest();
        encap.setName("James");
        encap.setAge(20);
        encap.setIdNum("12343ms");
        System.out.println("Name : " + encap.getName());
        System.out.println("Age : "+ encap.getAge());
    }
}

결과:
Name : James
Age : 20

도대체 언제 봉인이 필요하고, 언제 봉인이 필요하지 않습니까?봉인 여부에 대해 명확한 규정이 없지만 프로그램 설계의 측면에서 볼 때 일반적으로 비교적 좋은 프로그램의 클래스 중의 속성은 모두 봉인을 필요로 한다.이 때 속성 값을 설정하거나 얻으려면 setXxx (), getXxx () 방법만 사용할 수 있습니다. 이것은 명확하고 표준적인 규정입니다.
봉인된 장점 • 클래스의 필드는 읽거나 쓰기만 할 수 있습니다.클래스는 필드에 저장된 것을 완전히 제어할 수 있습니다.클래스의 사용자는 클래스가 어떻게 데이터를 저장하는지 알 필요가 없다.클래스는 필드의 데이터 형식을 바꿀 수 있지만 클래스 사용자는 그 어떠한 것도 바꿀 필요가 없다. 결론적으로 봉인은 프로그램의 호출을 제어할 수 있고 안전하게 하고 불법이나 잘못된 호출을 최대한 막을 수 있다.
상속은 무엇입니까?대상을 대상으로 하는 프로그래밍 언어로서 자바는 클래스의 계승 메커니즘을 제공한다.계승 메커니즘을 이용하여 새로 만든 클래스는 기존 클래스의 기초 위에서 기존 클래스의 구성원을 사용하거나 다시 쓰는 방법으로 기존 클래스의 구성원 변수를 방문할 수 있다.우리는 새 클래스를 기존 클래스 하위 클래스라고 하고, 기존 클래스는 새 클래스의 부모 클래스 (슈퍼클래스) 라고 부른다.만약에 클래스 A가 클래스 B의 부류이고 클래스 B가 클래스 C의 부류라면 우리는 C를 A의 자류라고 부른다. 클래스 C는 클래스 A에서 계승된 것이다.자바에서 클래스의 계승은 단일 계승이다. 즉, 하나의 하위 클래스는 하나의 하위 클래스만 가질 수 있고 하나의 하위 클래스는 여러 개의 하위 클래스를 가질 수 있다.모든 자바의 클래스는 자바입니다.lang.object 클래스는 계승된 것이기 때문에 Object는 모든 클래스의 조상 클래스이고 Object를 제외한 모든 클래스는 반드시 부류가 있어야 한다.extends 키워드를 통해 하나의 클래스가 다른 클래스를 계승하여 왔다는 것을 설명할 수 있으며 일반적인 형식은 다음과 같다.
클래스의 상속 형식
class    {
}
class    extends    {
}

다시 쓰기 클래스가 부모로부터 방법을 계승한다면, 이 방법이final로 표시되지 않으면 이 방법을 다시 쓸 수 있습니다.
다시 쓰는 장점은 특정한 하위 클래스 유형의 행위를 정의할 수 있다는 것이다. 이것은 하위 클래스가 요구에 근거하여 하위 클래스를 실현하는 방법을 의미한다.
대상 프로그래밍에서 오버리딩은 부모 클래스가 존재하는 방법을 다시 쓰는 것을 의미합니다.
예:
class Animal{
public void move(){
System.out.println("Animals can move");
}
}
class Dog extends Animal{
public void move(){
System.out.println("Dogs can walk and run");
}
}
public class Test{
public static void main(String args[]){
Animal a = new Animal(); 
Animal b = new Dog(); 
a.move();
b.move();
}
}

결과:
Animals can move
Dogs can walk and run

위의 예에서, 비록 b는 Animal 형식이지만,dog 종류를 실행하는 방법을 볼 수 있다.
이유는: 컴파일할 때 인용 형식을 검사합니다.그러나 런타임 시 JVM은 객체 유형이 어떤 객체에 속하는지 결정합니다.따라서 위의 예에서 Animal은 move 방법이 있지만 프로그램은 정상적으로 컴파일된다.실행할 때 특정 대상을 실행하는 방법입니다.
예:
class Animal{
public void move(){
System.out.println("Animals can move");
}
}
class Dog extends Animal{
public void move(){
System.out.println("Dogs can walk and run");
}
public void bark(){
System.out.println("Dogs can bark");
}
}
public class Test{
public static void main(String args[]){
Animal a = new Animal(); 
Animal b = new Dog(); 
a.move();
b.move();
b.bark();
}
}

이렇게 하면 다음과 같은 결과가 발생합니다.
Test.java:30: cannot find symbol symbol : method bark() location: class Animal b.bark();^

이 프로그램은 b의 인용 형식인 Animal에 bark라는 방법이 없기 때문에 컴파일할 때 오류가 발생합니다.
방법 리셋 규칙 리셋 방법의 매개 변수 목록은 원래 방법과 완전히 같아야 합니다.되돌아오는 값 형식은 원래 방법의 되돌아오는 값 형식과 같거나 부모 클래스가 정의할 때의 하위 형식이어야 합니다.다시 쓰기 함수 접근 레벨 제한은 원 함수보다 높을 수 없습니다.예를 들어 부모 클래스 방법이 공유로 성명된다면, 하위 클래스의 재작성 방법은 개인 (private) 이나 보호 (protected) 가 될 수 없습니다.이불류가 계승될 때만 방법은 다시 쓸 수 있다.방법은final로 정의되어 다시 쓸 수 없습니다.하나의 방법이 static로 정의되어 다시 쓸 수 없지만 다시 설명할 수 있습니다.한 가지 방법이 계승될 수 없다면, 다시 쓸 수도 없다.패키지에 있는 하위 클래스와private와final로 명시되지 않은 하위 클래스를 다시 쓸 수 있습니다.부모 클래스와 같은 가방에 없는 하위 클래스는non-final 방법만 다시 쓸 수 있거나public 또는 보호된 방법만 다시 쓸 수 있습니다. 다시 쓸 수 있는 방법이 있든 없든 상관없습니다.그러나 다시 쓰는 방법은 다시 쓰는 방법에 대한 설명보다 더 광범위한 검사 이상을 버려서는 안 된다.다시 쓰는 방법은 다시 쓰는 방법보다 더 제한적이거나 적은 이상을 던질 수 있다.구조 함수는 다시 쓸 수 없다.방법 덮어쓰기 (Overriding) 와 방법 리셋 (Overloading) 자바의 방법 리셋은 같은 클래스에서 두 개 또는 여러 방법의 방법 이름이 같지만 파라미터가 다른 경우 (같은 이름과 다른 참조) 발생합니다.이와 상대적으로 방법 덮어쓰기는 하위 클래스가 부모 클래스를 다시 정의하는 방법을 말한다.방법 덮어쓰기는 같은 방법 이름, 매개 변수 목록, 되돌아오는 형식이 있어야 합니다.덮어쓰는 사람은 덮어쓰는 방법의 접근을 제한하지 않을 수도 있습니다.
슈퍼 키워드 슈퍼는 하위 클래스에 사용되며, 직접 부모 클래스에서 차단된 변수나 방법에 접근하기 위해서입니다.
하위 클래스 구조 방법에서 상위 클래스의 구조 방법을 호출하려면 다음과 같이 하십시오.
super(매개변수 목록) 하위 클래스는 상위 클래스 멤버 변수를 참조합니다.
super.구성원 변수 이름 하위 클래스 구성원 방법이 상위 클래스 구성원 방법을 덮어썼을 때, 즉 하위 클래스와 상위 클래스는 완전히 같은 방법으로 정의되지만 메서드는 다를 수 있습니다.
super.방법명(매개변수 목록) 예:
class Animal{
public void move(){
System.out.println("Animals can move");
}
}
class Dog extends Animal{
public void move(){
super.move();
System.out.println("Dogs can walk and run");
}
}
public class Test{
public static void main(String args[]){
Animal b = new Dog(); 
b.move(); 
}
}

결과:
Animals can move
Dogs can walk and run

this 키워드는 클래스의 구조 방법에서 this를 통해 다른 구조 방법을 호출합니다.
this(매개변수 목록)
방법 매개 변수나 방법 중의 국부 변수와 구성원 변수가 같은 이름인 경우 구성원 변수는 차단되며, 이때 구성원 변수에 접근하려면
this.구성원 변수 이름으로 구성원 변수를 인용합니다.물론 동명 없이 멤버 변수의 이름을 직접 사용할 수 있지만this를 사용하지 않아도 된다.
방법에서 현재 대상을 인용해야 할 때.
this 사실 이러한 용법 총결은'this는 대상 자체를 가리키는 지침'이라는 말에 대한 더욱 깊은 이해에서 나온 것이다.
무엇이 다태입니까?다태란 대상이 여러 형태를 가질 수 있다는 것을 가리킨다.OOP에서 가장 많이 사용되는 멀티태스킹은 상위 클래스가 하위 클래스 객체를 참조할 때 발생합니다.
1개 이상의 IS-A 테스트를 통과할 수 있는 자바 대상은 다태적으로 여겨진다.자바에서 모든 대상은 다태적이다. 왜냐하면 모든 대상은 자신의 유형과 Object 클래스의 IS-A 관계를 가지고 있기 때문이다.
인용 변수를 통해 한 대상에 접근할 수 있는 유일한 방법임을 아는 것이 중요하다.인용 변수는 한 종류만 있을 수 있습니다.인용 변수는 일단 성명되면 바뀔 수 없다.
인용 변수는final로 성명되지 않은 다른 대상에 다시 분배될 수 있습니다.인용 변수의 유형은 호출할 수 있는 대상을 결정하는 방법입니다.
인용 변수는 모든 대상의 성명 형식이나 성명 형식의 하위 형식을 인용할 수 있습니다.인용 변수는 클래스나 인터페이스 형식으로 설명할 수 있습니다.
예제
다음 예를 살펴보겠습니다.
public interface Vegetarian{}
public class Animal{}
public class Deer extends Animal implements Vegetarian{}

현재 Deer류는 다태적이다. 왜냐하면 그는 여러 개의 계승 메커니즘을 가지고 있기 때문이다.위의 예에는 다음과 같은 설명이 있습니다.
• Deer가 바로 Animal
• Deer가 바로 Vegetarian입니다.
• Deer 는 Deer
• Deer가 Object
Deer 객체를 참조하는 참조 변수를 제공하면 다음 선언은 적법합니다.
Deer d = new Deer();
Animal a = d;
Vegetarian v = d;
Object o = d;

모든 인용 변수 d, a, v, o는 메모리에서 같은 대상 Deer를 인용합니다.
무엇이 추상적입니까?만약 하나의 클래스가 구체적인 대상을 묘사하기 위해 충분한 정보를 포함하지 않는다면 추상적인 클래스이다.
클래스 이름 앞에 수식자 abstract를 추가하기;비추상적인 방법을 포함하여 일반적인 클래스에 포함될 수 있는 모든 구성원을 포함할 수 있다.추상적인 방법도 포함할 수 있다. abstract로 수식하고 방법의 원형만 있고 방법의 실현이 없다.구체적인 실례 대상이 없는 클래스는 new 방법으로 실례화할 수 없고 초클래스로만 사용할 수 있다.하위 클래스가 추상 초류 중의 모든 추상 방법을 실현해야만 하위 클래스가 추상 클래스가 아니라 실례가 생길 수 있다.만약 하위 클래스가 추상적인 방법이 실현되지 않았다면 하위 클래스는 추상 클래스일 수밖에 없다.//추상류
/* File name : Employee.java */
public abstract class Employee{
private String name;
private String address;
private int number;
public Employee(String name, String address, int number){
System.out.println("Constructing an Employee");
this.name = name;
this.address = address;
this.number = number;
}
public double computePay(){
System.out.println("Inside Employee computePay");
return 0.0;
}
public void mailCheck(){
System.out.println("Mailing a check to " + this.name
+ " " + this.address);
}
public String toString(){
return name + " " + address + " " + number;
}
public String getName(){
return name;
}
public String getAddress(){
return address;
}
public void setAddress(String newAddress){
address = newAddress;
}
public int getNumber(){
return number;
}
}

Employee 클래스는 현재 추상적이지만, 여전히 세 가지 변수, 일곱 가지 방법, 하나의 구조 방법이 있다.
추상적인 방법은 특정한 방법을 제공하는 클래스를 원하지만, 그의 하위 클래스에서 이 방법을 실제로 실현하고 싶다면, 부모 클래스에서 이 방법을 추상적이라고 성명할 수 있다.
abstract 키워드도 추상적인 방법을 정의하는 데 사용된다.추상적인 방법은 하나의 방법명만 포함하고 방법체는 없다.방법명 다음에 괄호가 아니라 바로 분호를 따라가세요.
public abstract class Employee
{
private String name;
private String address;
private int number;
public abstract double computePay();
//Remainder of class definition
}

추상적인 방법을 설명하는 데는 두 가지 결과가 있다.
만약 하나의 클래스에 추상적인 방법이 포함되어 있다면, 클래스도 반드시 추상적이어야 한다.모든 하위 클래스는 이 추상적인 방법을 덮어쓰거나 추상적인 방법으로 계속 설명해야 한다.하위 클래스는 추상적인 방법을 계승하기 때문에 반드시 그를 덮어씌워야 한다.만약 이렇게 하지 않는다면, 그들은 그것을 계속 추상적으로 성명하거나, 그들의 하위 클래스에서 덮어써야 한다.결국 후대류는 추상적인 방법을 실현해야 한다.그렇지 않으면 너는 줄곧 실례화될 수 없는 추상류를 가지고 있을 것이다.
Salary가 Employee 클래스를 상속할 경우 다음과 같이 컴퓨터페이() 방법을 구현해야 합니다.
/* File name : Salary.java */
public class Salary extends Employee
{
private double salary; // Annual salary
public double computePay()
{
System.out.println("Computing salary pay for " + getName());
return salary/52;
}
//Remainder of class definition
}

좋은 웹페이지 즐겨찾기