나는 자바를 처음 접하고 기본적인 개념을 배우고있다. 나는 추상화를 배우고 있었고 가장 기본적인 정의는 다음과 같다 : 복잡성을 숨기기 위해 사용 (프로세스가 어떻게 수행되는지 숨기고, 우리는 무엇을 할 수 있는지 보여 줌)?Java 추상화
충분히 정교합니다. 나는 추상화가 무엇인지에 대한 기본적인 생각을 가지고있다. 하지만 난 여기에 몇 가지에 명확하지 않다 :
/* 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;
}
}
Salary.java
/* File name : 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;
}
}
Main.java
/* File name : 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();
}
}
:
은 아래의 예를 볼 수 있습니다
내 질문은 여기에, 우리는 심지어 추상적 인 수업을 이해하지 못할 수도 있습니다. 그래서 우리는 그것을 확장해야하고 같은 방법을 넘어야합니까? 자식 클래스의 추상 메소드를 오버라이드 (override)하는 경우, 슈퍼 클래스 (abstract 클래스 메소드)는 사용하지 않습니다. 또한 intentiate도 우리는 왜 abtsrcat 클래스를 확장하는 대신 하나의 클래스에 모든 것을 쓸 수 있습니까?
추상 클래스를 확장하고 동일한 것을 오버라이드하는 것은 이러한 낭비 추상 클래스의 공간이 더 많으므로 부정적인 것은 아닙니다.
나는 혼란스러워하는 이유가 명확하지 않다는 것을 알고있다. 누군가가 이것을 설명 할 수 있다면 (나와 같은 멍청한 놈에게는 도움이되지 않는 딱지 결정이 없다) 설명이 있으면 정말 감사 할 것입니다. 잘못된 사용 예, 추상 클래스의 이해의 제외
직원 not_ 급여 _is를 호출하여 구현 언제든지 않습니다. 클래스 계층 구조가 의미가 없습니다 – SLaks
[추상 클래스를 사용하는 방법 및시기] 가능한 중복 (https://stackoverflow.com/questions/6007089/how-and-when-to-use-an-abstract-class) –
https : // stackoverflow.com/questions/29498036/what-of-the-purpose-of-abstract-classes-in-java –