抽象类在Java中与接口类似,但它可以包含默认方法实现。抽象类可以拥有没有主体的抽象方法,也可以拥有带有实现的方法。abstract
关键字用于创建抽象类和方法。Java中的抽象类不能被实例化。抽象类主要用于为子类提供扩展和实现抽象方法的基础,并重写或使用抽象类中实现的方法。
Java中的抽象类
package com.journaldev.design;
//抽象类
public abstract class Person {
private String name;
private String gender;
public Person(String nm, String gen){
this.name=nm;
this.gender=gen;
}
//抽象方法
public abstract void work();
@Override
public String toString(){
return "Name="+this.name+"::Gender="+this.gender;
}
public void changeName(String newName) {
this.name = newName;
}
}
请注意,work()
是一个没有主体的抽象方法。以下是一个在Java中扩展抽象类的具体类示例。
package com.journaldev.design;
public class Employee extends Person {
private int empId;
public Employee(String nm, String gen, int id) {
super(nm, gen);
this.empId=id;
}
@Override
public void work() {
if(empId == 0){
System.out.println("Not working");
}else{
System.out.println("Working as employee!!");
}
}
public static void main(String args[]){
//使用抽象类进行编码
Person student = new Employee("Dove","Female",0);
Person employee = new Employee("Pankaj","Male",123);
student.work();
employee.work();
//使用在抽象类中实现的方法 - 继承
employee.changeName("Pankaj Kumar");
System.out.println(employee.toString());
}
}
请注意,子类 Employee 使用 Java 中的继承 继承 来继承超类 Person 的属性和方法。还要注意在 Employee 类中使用了 Override 注解。阅读更多了解为什么我们在覆盖方法时应始终使用 Override 注解。
Java 中的抽象类重要要点
abstract
关键字用于在 Java 中创建抽象类。- Java 中的抽象类无法实例化。
- 我们可以使用
abstract
关键字创建抽象方法,抽象方法没有方法体。 - 如果一个类有抽象方法,则该类也应使用 abstract 关键字声明为抽象类,否则将无法编译。
- 抽象类不一定需要有抽象方法。即使没有声明任何抽象方法,我们也可以将类标记为抽象类。
- 如果抽象类没有任何方法实现,最好使用接口,因为 Java 不支持多类继承。
- Java 中的抽象类的子类必须实现所有抽象方法,除非子类也是抽象类。
- 所有接口中的方法都是隐式抽象的,除非接口方法是静态的或默认的。Java 8 中添加了接口的静态方法和默认方法,更多详情请阅读Java 8 接口变更。
- Java 抽象类可以实现接口,甚至可以不提供接口方法的实现。
- Java 抽象类用于为所有子类提供通用的方法实现,或提供默认实现。
- 如果抽象类有
main()
方法,我们可以像运行其他类一样在 Java 中运行它。
这就是 Java 中抽象类的全部内容。如果我漏掉了任何重要内容,请通过评论告诉我们。
Source:
https://www.digitalocean.com/community/tutorials/abstract-class-in-java