추상 클래스와 템플릿 디자인 모델
5207 단어 Java 학습
추상류
1, 무엇이 추상류입니까?
추상류
3, 추상 클래스 주의 사항
2. 템플릿 디자인 모델
추상류
1, 무엇이 추상류입니까?
추상류는 추상류로 이른바 추상류는 구체에 비해 말한다.일반적으로 구체적인 유형은 직접적으로 대응하는 대상이 있지만 추상적인 유형은 없고 추상적인 개념을 표현한다.예를 들어 동물의 추상적인 개념은 판다, 토끼 등이 구체적인 대상이다.
자바에서 abstract 키워드를 사용하여 추상 클래스와 추상 방법을 설명합니다.예는 다음과 같습니다.public abstract class Animal{
public abstract void eat();
}
추상적인 방법을 정의한 클래스는 반드시 추상적인 클래스로 성명되어야 하며 추상적인 클래스는 추상적인 방법이 없을 수 있다.추상 클래스는 실례화할 수 없는 대상을 제외하고 클래스의 다른 기능은 여전히 존재한다. 구성원 변수, 구성원 방법과 구조 방법의 방문 방식은 일반 클래스와 같다.
추상 클래스는 대상을 만들 수 없습니다. 대상을 만들려면 구체적인 하위 클래스를 사용해야 합니다.일반 클래스가 추상 클래스를 계승한 후에 추상 클래스에 정의된 모든 추상 방법을 실현해야 한다. 다음과 같다.public class Panda extends Animal{
public void eat(){
System.out.println("I like to eat bamboo!!!");
}
}
추상 클래스는 new를 사용할 수 없지만 추상 클래스의 변수를 설명하고 추상 클래스의 구체적인 하위 클래스의 대상을 인용할 수 있다. 다음과 같다.Animal animal = new Panda();
animal.eat();
다음은 완전한 예입니다.import java.util.*;
abstract class Teacher{
private String name;
private int age;
private double salary;
public Teacher(){}
public Teacher(String name, int age, double salary){
this.name = name;
this.age = age;
this.salary = salary;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public void setSalary(double salary){
this.salary = salary;
}
public double getSalary(){
return this.salary;
}
public void showMessage(){
System.out.println(getName() + " :" + getAge() + ", :" + getSalary());
}
}
class JobTitle extends Teacher{
private String level;
public JobTitle(String name, int age, double salary, String level){
super(name, age, salary);
this.level = level;
}
public void setLevel(String level){
this.level = level;
}
public String getLevel(){
return this.level;
}
public void showMessage(){
System.out.println(getName() + " :" + getAge() + ", :" + getSalary() + ", :" + getLevel());
}
}
public class Test{
public static void main(String[] args){
Teacher teacher = new JobTitle("Steven", 40, 12000.0, " ");
teacher.showMessage();
}
}
상술한 코드를 보면 추상적인 방법과 추상류는 불필요하다고 생각할 수 있고 빈 방법체를 직접 정의할 수 있으며 구체적인 내용은 자류에서 실현해도 된다.다음에 우리는 다음 화제를 토론할 것이다. 왜 추상류가 있어야 합니까?
추상류
(1) 오용을 피한다.자바에는 추상적인 클래스와 추상적인 방법이 도입되어 오류 수정 메커니즘으로서 사용자가 더욱 잘 사용하고 오용을 줄일 수 있도록 돕는다.추상적인 방법을 사용할 때, 자류는 반드시 이 방법을 실현해야 하며, 간과되기 쉽지 않다.추상 클래스를 사용할 때 클래스 사용자가 대상을 만들 때 구체적인 하위 클래스를 사용해야 하며 완전하지 않은 부류를 오용할 수 없다는 것을 알 수 있다.
(2) 상대적으로 안전하다.빈 방법에 대해 상술한 eat() 방법과 같이 우리는 일반적인 부류를 빈 방법체로 정의한 다음에 자류에 맡겨 실현할 수 있다고 확실히 생각한다.그런데 만약에 되돌아오는 값이 있다면?예를 들어 동물의 체중은 추상류라면public abstract double weight()로 쓸 수 있다.만약 일반 부류라면, 이 방법에는 되돌아오는 값이 존재할 것이다.Public double weight(){return 0.0}.이런 식으로 자류에 맡기면 자류가 실현을 잊어버리면 문제가 생긴다.한편, 추상류는 자류가 반드시 추상적인 방법을 실현해야 한다고 규정하고 어느 정도에 보장했다.
3, 추상 클래스 주의 사항
(1) 추상류는 실례화할 수 없고 실례화되면 오류가 발생하고 컴파일링이 통과할 수 없다.추상 클래스의 비추상 하위 클래스만 대상을 만들 수 있습니다.
(2) 추상류에 반드시 추상적인 방법을 포함하는 것은 아니지만 추상적인 방법이 있는 류는 반드시 추상류이다.
(3) 추상류 중의 추상적인 방법은 성명일 뿐 방법체를 포함하지 않고 방법의 구체적인 실현, 즉 방법의 구체적인 기능을 제시하지 않는다.
(4) 구조 방법, 유형 방법(static로 수식하는 방법)은 추상적인 방법으로 성명할 수 없다.
(5) 추상류의 자류는 추상류 중의 추상적 방법의 구체적인 실현을 제시해야 한다. 이 자류도 추상류가 아니라면.
2. 템플릿 디자인 모델
템플릿 디자인 모드: 조작 중인 알고리즘의 골격을 정의하고 일부 절차를 하위 클래스로 지연시킨다.템플릿 방법은 하위 클래스가 알고리즘의 구조를 바꾸지 않고 이 알고리즘의 특정한 절차를 재정의할 수 있게 한다.개발자는 개발할 때 방법의 실현을 고려하기만 하면 된다.어떤 상황에서 방법이 호출될지 고려할 필요가 없다.코드 재사용을 실현하다.
장점: (1) 봉인 불변 부분, 확장 가변 부분.(2) 공공 코드를 추출하여 유지 보수에 편리하다.(3) 행위는 부류가 제어하고 자류가 실현한다.
단점: 각기 다른 실현은 하나의 하위 클래스로 이루어져야 하기 때문에 클래스의 개수가 증가하고 시스템을 더욱 방대하게 만든다.
장면 사용: (1) 여러 개의 하위 클래스가 공통된 방법이 있고 논리가 같다.(2) 중요하고 복잡한 방법은 모범적인 방법으로 고려할 수 있다.
주의사항: 악의적인 조작을 방지하기 위해 일반적인 템플릿 방법에final 키워드를 추가합니다.
전쟁 장면을 모의하여 AbstractClass를 추상적인 부류로 삼았는데 그 중에서final은 부류가 이 방법을 덮어쓰지 않도록 하고 전쟁 순서를 바꾸는 것을 방지했다.import java.util.*;
abstract class AbstractClass{
public final void process(){
depart();
fight();
triumph();
}
public void depart(){
System.out.println(" , ");
}
public abstract void fight();
public void triumph(){
System.out.println(" , ");
}
}
class General1 extends AbstractClass{
public void fight(){
System.out.println(" , ");
}
}
class General2 extends AbstractClass{
public void fight(){
System.out.println(" , ");
}
}
public class Test{
public static void main(String[] args){
AbstractClass general1 = new General1();
general1.process();
AbstractClass general2 = new General2();
general2.process();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JWT 인증 방식의 실현
1, 우선 서버에서 로그인 요청을 받았을 때 요청 헤더에 영패가 있는지 확인합니다(첫 로그인은 반드시 없습니다).서버는 계정 비밀번호가 모두 통과된 것을 검증하는 상황에서 token(즉 영패)을 생성하여 응답 헤더에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
public abstract class Animal{
public abstract void eat();
}
public class Panda extends Animal{
public void eat(){
System.out.println("I like to eat bamboo!!!");
}
}
Animal animal = new Panda();
animal.eat();
import java.util.*;
abstract class Teacher{
private String name;
private int age;
private double salary;
public Teacher(){}
public Teacher(String name, int age, double salary){
this.name = name;
this.age = age;
this.salary = salary;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public void setSalary(double salary){
this.salary = salary;
}
public double getSalary(){
return this.salary;
}
public void showMessage(){
System.out.println(getName() + " :" + getAge() + ", :" + getSalary());
}
}
class JobTitle extends Teacher{
private String level;
public JobTitle(String name, int age, double salary, String level){
super(name, age, salary);
this.level = level;
}
public void setLevel(String level){
this.level = level;
}
public String getLevel(){
return this.level;
}
public void showMessage(){
System.out.println(getName() + " :" + getAge() + ", :" + getSalary() + ", :" + getLevel());
}
}
public class Test{
public static void main(String[] args){
Teacher teacher = new JobTitle("Steven", 40, 12000.0, " ");
teacher.showMessage();
}
}
import java.util.*;
abstract class AbstractClass{
public final void process(){
depart();
fight();
triumph();
}
public void depart(){
System.out.println(" , ");
}
public abstract void fight();
public void triumph(){
System.out.println(" , ");
}
}
class General1 extends AbstractClass{
public void fight(){
System.out.println(" , ");
}
}
class General2 extends AbstractClass{
public void fight(){
System.out.println(" , ");
}
}
public class Test{
public static void main(String[] args){
AbstractClass general1 = new General1();
general1.process();
AbstractClass general2 = new General2();
general2.process();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JWT 인증 방식의 실현1, 우선 서버에서 로그인 요청을 받았을 때 요청 헤더에 영패가 있는지 확인합니다(첫 로그인은 반드시 없습니다).서버는 계정 비밀번호가 모두 통과된 것을 검증하는 상황에서 token(즉 영패)을 생성하여 응답 헤더에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.