Java中的抽象
我是java新手,学习基本概念。我在学习抽象,我发现最基本的定义是:用来隐藏复杂性(隐藏一个过程将如何完成,并显示我们可以做什么?) 很公平。我对什么是抽象有了一个基本的概念。但我不清楚以下几点: 让我们看看下面的例子:Java中的抽象,java,abstract-class,abstract,Java,Abstract Class,Abstract,我是java新手,学习基本概念。我在学习抽象,我发现最基本的定义是:用来隐藏复杂性(隐藏一个过程将如何完成,并显示我们可以做什么?) 很公平。我对什么是抽象有了一个基本的概念。但我不清楚以下几点: 让我们看看下面的例子: /* File name : Employee.java */ public abstract class Employee { private String name; private String address; private int number;
/* 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;
}
}
/* 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();
}
}
Main.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;
}
}
/* 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类
当扩展抽象类并重写同样的东西时,这不是一个负面的结果,因为这些浪费的抽象类会占用更多的空间吗
我知道我不清楚,这就是我困惑的原因。如果有人能解释清楚这一点(没有对像我这样的noobs不有用的分层定义),我将非常感谢有时间来解释。除了你使用的坏例子之外,你对抽象类的理解是不对的: 所以我们必须扩展它并超越相同的方法?当我们重写子类中的抽象方法时,超类(抽象类方法)是没有用的 首先:抽象类和接口都保留下来,以提供通过扩展或实现类重写的抽象方法 Second:抽象类可以为所有扩展类实现通用方法-这样您就不需要反复实现或重写它们。就用它们吧。(注意:从Java 8开始,接口也可以有方法的默认实现) 第三:如果您需要通用实现以外的实现,请从超类重写所需的方法
Forth:如果在另一个实现中需要运行super方法,请在实现中随时调用
super.methodName(…)
以执行此操作。薪资不是员工。你的课程层次结构不可能复制@SLaks,这是我正在关注的链接。如果网站中有错误,请告诉我。如果教程让员工加薪,那么放弃这些教程,从更好的来源学习。有几本关于OOPs和Java的不错的书。我看到了你的链接,我重申了我所说的。工资不符合is-a测试。工资不是一种更具体的员工类型。相反,雇员有——一份薪水——这里的构成,而不是遗产。