06. 객체 지향(3) - 객체 지향의 3가지 특성: 패키지, 상속 및 멀티태스킹

5327 단어 대상을 향하다

6. 대상을 대상으로 하는 3대 특성: 봉인, 계승과 다중성


 

6.1 포장성:


모든 대상은 그가 조작할 수 있는 데 필요한 모든 정보를 포함하기 때문에 대상은 다른 대상에 의존하여 자신의 조작을 완성할 필요가 없다. 이런 특성을 봉인이라고 한다.
예를 들면 다음과 같습니다.
   class Person{
        private int age;
	    public void setAge(int i){
		    if(i<0 || i>130)
		    	return;
		    age = i; 
	    }
	    public int getAge(){ 
		return age;
		}
	}
	public class TestPerson{
	    public static void main(String args[]){
            Person p1 = new Person();
		    p1.setAge(3);
		    p1.setAge(-6);
		    System.out.println(p1.getAge());
        }
    }

 
 
 
패키지는 다음과 같은 목적을 달성할 수 있습니다.
1) 숨겨진 클래스의 구현 디테일;
2) 사용자가 사전에 맞춤형 방법으로만 데이터에 접근할 수 있도록 하고 제어 논리를 편리하게 추가하여 속성에 대한 불합리한 조작을 제한한다.
3) 수정에 편리하고 코드의 유지보수성을 강화한다.
4) 데이터 검사 가능;
 
 
 

6.2 상속성


계승은 일종의'is-a'관계를 대표하는데 개인이 생각하는 계승의 가장 큰 장점은 많은 코드와 다중 기능이 적다는 것이다.
예를 들면 다음과 같습니다.
class Person{
      public String name;
      public int age;
	  public Person(String name,int age){
		this.name=name;
		this.age=age;
	  }
	  public Person() { // , Student 。
	  
	  }
      public void getInfo(){
       	System.out.println(name);    
      	System.out.println(age);    
      }
	}
	class Student extends Person{
      public void study(){
      	    System.out.println("Studding");
      }
      
      public static void main(String[] args){
      	Person p=new Person();
      	p.name="person";
      	p.age=30;
      	p.getInfo();
      	
      	Student s=new Student();
        s.name="student";
        s.age=16;
        s.getInfo();
        s.study();
      }
}

 
 
 
클래스의 계승에는 다음과 같은 세부적인 문제가 있다.
1).계승을 통해 유형의 정의를 간소화할 수 있음을 우리는 이미 위의 예에서 알게 되었다.
2).Java는 단일 상속만 지원하며 다중 상속은 허용되지 않습니다.자바에서 하위 클래스는 하나의 부모 클래스만 있고 하나의 클래스가 여러 클래스를 직접 계승하는 것은 허용되지 않지만, 하나의 클래스는 여러 클래스에 계승될 수 있다. 예를 들어 클래스 X는 클래스 Y와 클래스 Z를 계승할 수 없다.
3).여러 층의 계승이 있을 수 있다. 즉, 하나의 클래스가 특정한 클래스의 하위 클래스를 계승할 수 있다. 예를 들어 클래스 B가 클래스 A를 계승하고 클래스 C가 클래스 B를 계승할 수 있다. 그러면 클래스 C도 간접적으로 클래스 A를 계승한다.이러한 적용은 다음과 같습니다.
	class A {}
	class B extends A{}
	class C extends B{}

 
 
 
4).자류는 부류의 모든 구성원 변수와 구성원 방법을 계승하지만 부류의 구조 방법을 계승하지 않는다.하위 클래스의 구조 방법에서 문장 슈퍼 (매개 변수 목록) 를 사용하여 부모 클래스의 구조 방법을 호출할 수 있습니다.예를 들어 우리는 Student 클래스에 구조 방법을 추가했다. 이 구조 방법에서 우리는 슈퍼로 부류를 호출하는 어떤 구조 방법을 명확하게 지정했다.
	class Student extends Person{
		public Student(String name,int age,String school)
		{
			super(name,age);
			this.school=school;
		}
	}

 
 
 
5).만약 하위 클래스의 구조 방법 중 부모 클래스 구조 방법을 현저하게 호출하지 않았고this 키워드를 사용하여 다시 불러오는 다른 구조 방법을 호출하지 않았다면 하위 클래스의 실례 대상이 생겼을 때 시스템은 기본적으로 하위 클래스에 파라미터가 없는 구조 방법을 호출할 것이다.즉, 아래의 클래스 B에서 정의한 구조 방법에서 슈퍼() 문장을 쓰든 안 쓰든 효과는 같다.
	Public class B extends A{
		public B(){
			super();// , 。
		}
	}

 
 

6.3 다태성


정의: Parent=Child에 값을 부여한 후 현재 값을 부여한 하위 객체의 특성에 따라 상위 객체를 하나 이상의 하위 객체와 동일하게 설정할 수 있는 기술입니다.아버지의 행동이 아들을 닮은 것이지, 아들의 행동이 아버지를 닮은 것이 아니라는 것이다. 
1).하위 클래스를 상위 클래스로 변환
예를 들면 다음과 같습니다.
	class A{
		public void func1()
		{
			System.out.println("A func1 is calling");
		}
		public void func2()
		{
			func1();
		}
	}
	class B extends A{
		public void func1()
		{
			System.out.println("B func1 is calling");
		}
	    public void func3()
	    {
			System.out.println("B func3 is calling");
		}
	}
	class C{
		public static void main(String [] args)
		{
			B b=new B();
			A a = b;
			callA(a);
			callA(new B());
		}
		public static void callA(A a)
		{
			a.func1();
			a.func2();
		}
	}

 
 
2).부모 클래스를 하위 클래스로 변환
예를 들면 다음과 같습니다.
public static void CallA(A a){
		B b=(B)a;
		b.func1();
		b.func2();
		b.func3();
	}

 3).instanceof 조작부호
instanceof로 하나의 클래스가 어떤 인터페이스를 실현했는지 판단할 수도 있고, 하나의 실례 대상이 하나의 클래스에 속하는지 판단할 수도 있다.또는 위의 코드로 예를 들 수 있습니다.
 
public static void CallA(A a){
		if(a instanceof B){
			B b=(B)a;
			b.func1();
			b.func2();
			b.func3();
		}else{
			a.func1();
			a.func2();
		}
	}

 
4).앞에서 말한 하위 클래스가 자동으로 부모 클래스로 변환되는 예에서 우리의 호출 프로그램은 이렇게 썼다.
 
class C{
		public static void main(String [] args){
			B b=new B();
			A a = b;
			callA(a);
			callA(new B());
		}
		public static void callA(A a){
			a.func1();
			a.func2();
		}
	}

프로그램 실행 결과:
B func1 is calling
B func1 is calling
B func1 is calling
B func1 is calling

좋은 웹페이지 즐겨찾기