[英]Abstraction in Java
我是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();
}
}
我的問題是,我們甚至無法實例化一個抽象類。 因此,我們必須擴展它並覆蓋相同的方法? 當我們在子類中重寫抽象方法時,超級類(抽象類方法)沒有用。 同樣,我們甚至不能實例化,為什么我們不能只在一個類中編寫所有內容,而不擴展abtsrcat類?
在擴展抽象類並覆蓋同一件事時,這是否不是負面的,因為這些浪費的抽象類的空間會更多嗎?
我知道我不清楚,這就是我感到困惑的原因。 如果任何人都可以通過解釋來澄清這一點(沒有像我這樣的菜鳥沒有用的強硬定義),我將非常感謝您的寶貴時間。
除了使用錯誤的示例之外,您對Abstract類的理解也不對:
因此,我們必須擴展它並覆蓋相同的方法? 當我們在子類中重寫抽象方法時,超級類(抽象類方法)沒有用
第一:抽象類和接口都保留提供擴展或實現類所要覆蓋的抽象方法。
第二:對於所有擴展類,抽象類都可以使用通用方法實現-則無需一遍又一遍實現或覆蓋它們。 只需使用它們。 ( 注意:從Java 8 Interface開始,方法的默認實現也可以)
第三:如果您需要除通用實現之外的其他方法-覆蓋超類中的所需方法。
第四:如果在另一個實現中,您需要運行super方法-在實現中的任何時候都可以通過調用super.methodName(...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.