최고의 자바 추상 클래스 튜토리얼 2024년, 이 튜토리얼에서는 추상 클래스,추상 클래스 상속,추상 방법,를 배울 수 있습니다.
객체 지향 개념에서 모든 개체 유형별로 설명되어 있지만, 반대로, 모든 클래스 오브젝트를 설명하기 위해 사용 된 것으로, 객체 클래스는 구체적인 설명을하기에 충분한 정보를 포함하지 않으면 이러한 클래스는 추상 클래스입니다.
추상 클래스 이외에, 다른 기능 클래스는 여전히 존재 멤버 변수, 메소드 및 부재 생성자와 같은 일반 카테고리에 액세스하는 방법을 객체 인스턴스화 될 수 없다.
추상 클래스는 객체를 인스턴스화 할 수 없기 때문에 추상 클래스를 상속해야하므로, 그것을 사용할 수 있습니다. 이 때문에, 일반적으로 설계 단계에서 결정되거나 추상 클래스를 설계하지.
상위 클래스는 일반적인 서브 클래스의 집합을 포함하지만, 부모 클래스 자체가 추상적 인 때문에, 당신은이 방법을 사용할 수 없습니다.
자바 언어로 추상 클래스 추상 클래스를 정의하는 데 사용합니다. 다음 예 :
/* 文件名 : 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 클래스는, 다르지 않다 것을주의. 이제 다음 예제를 시도하는 경우 :
/* 文件名 : AbstractDemo.java */ public class AbstractDemo { public static void main(String [] args) { /* 以下是不允许的,会引发错误 */ Employee e = new Employee("George W.", "Houston, TX", 43); System.out.println("\n Call mailCheck using Employee reference--"); e.mailCheck(); } }
당신이 AbstractDemo 클래스를 컴파일 할 때 다음과 같은 오류가 발생합니다 :
Employee.java:46: Employee is abstract; cannot be instantiated Employee e = new Employee("George W.", "Houston, TX", 43); ^ 1 error
Employee 클래스에 의해 상속 우리의 일반적인 방법 :
/* 文件名 : Salary.java */ public class Salary extends Employee { private double salary; //Annual salary public Salary(String name, String address, int number, double salary) { super(name, address, number); setSalary(salary); } public void mailCheck() { System.out.println("Within mailCheck of Salary class "); System.out.println("Mailing check to " + getName() + " with salary " + salary); } public double getSalary() { return salary; } public void setSalary(double newSalary) { if(newSalary >= 0.0) { salary = newSalary; } } public double computePay() { System.out.println("Computing salary pay for " + getName()); return salary/52; } }
우리는 Employee 클래스 변수와 메소드의 일곱 멤버 3 명에서 상속 급여 클래스 개체를 인스턴스화하는 경우 우리는 클래스 직원의 개체를 인스턴스화 만 할 수는 없지만.
/* 文件名 : AbstractDemo.java */ public class AbstractDemo { public static void main(String [] args) { Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00); Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00); System.out.println("Call mailCheck using Salary reference --"); s.mailCheck(); System.out.println("\n Call mailCheck using Employee reference--"); e.mailCheck(); } }
다음과 같이 위의 프로그램은 결과가 컴파일 :
Constructing an Employee Constructing an Employee Call mailCheck using Salary reference -- Within mailCheck of Salary class Mailing check to Mohd Mohtashim with salary 3600.0 Call mailCheck using Employee reference-- Within mailCheck of Salary class Mailing check to John Adams with salary 2400.
특정 멤버 메소드를 포함하는 클래스를 디자인하려면 방법의 구체적인 구현이 그 서브 클래스에 의해 결정됩니다, 당신은 부모 클래스의 메소드가 추상 메소드입니다 선언 할 수 있습니다.
마찬가지로 추상적 키워드 추상 메소드를 선언하는 데 사용할 수있는 추상적 방식 만 메소드 이름, 어떠한 방법 체를 포함한다.
추상적 인 방법 대신 직접 중괄호의 세미콜론 메소드 이름 뒤에 정의되어 있지 않습니다.
public abstract class Employee { private String name; private String address; private int number; public abstract double computePay(); //其余代码 }
다음과 같은 두 가지 결과가 발생합니다 추상 메소드를 선언합니다 :
상속 된 추상 메소드 서브 클래스는이 메소드를 오버라이드 (override)해야합니다. 그렇지 않으면, 서브 클래스는 추상 클래스로 선언해야합니다. 궁극적으로, 개체를 인스턴스화하는 데 사용할 수 없습니다 최종 상위 클래스의 서브 클래스로 초기부터, 그렇지 않으면 추상 메소드를 구현하는 서브 클래스가 있어야합니다.
급여 클래스는 Employee 클래스를 상속하면 computePay () 메소드를 구현해야합니다 :
/* 文件名 : 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; } //其余代码 }