Java中的抽象类类似于接口,不同之处在于它可以包含默认方法实现。抽象类可以有一个没有主体的抽象方法,也可以有有实现的方法。abstract
关键字用于创建抽象类和方法。无法实例化Java中的抽象类。抽象类主要用于为子类扩展和实现抽象方法以及覆盖或使用抽象类中实现的方法提供基础。
Java中的抽象类
1package com.journaldev.design;
2
3//abstract class
4public abstract class Person {
5
6 private String name;
7 private String gender;
8
9 public Person(String nm, String gen){
10 this.name=nm;
11 this.gender=gen;
12 }
13
14 //abstract method
15 public abstract void work();
16
17 @Override
18 public String toString(){
19 return "Name="+this.name+"::Gender="+this.gender;
20 }
21
22 public void changeName(String newName) {
23 this.name = newName;
24 }
25}
注意,work()是一个抽象方法,它没有body。下面是一个具体类的例子,它扩展了Java中的抽象类。
1package com.journaldev.design;
2
3public class Employee extends Person {
4
5 private int empId;
6
7 public Employee(String nm, String gen, int id) {
8 super(nm, gen);
9 this.empId=id;
10 }
11
12 @Override
13 public void work() {
14 if(empId == 0){
15 System.out.println("Not working");
16 }else{
17 System.out.println("Working as employee!!");
18 }
19 }
20
21 public static void main(String args[]){
22 //coding in terms of abstract classes
23 Person student = new Employee("Dove","Female",0);
24 Person employee = new Employee("Pankaj","Male",123);
25 student.work();
26 employee.work();
27 //using method implemented in abstract class - inheritance
28 employee.changeName("Pankaj Kumar");
29 System.out.println(employee.toString());
30 }
31
32}
请注意,子类Employee使用java .中的继承继承了超类Person的属性和方法还要注意Employee类中覆盖annotation的使用。阅读更多内容,了解为什么我们在覆盖method.时应该始终使用覆盖注解
Java中的抽象类要点
1.在Java中使用abstract
关键字创建抽象类。
2.Java中的抽象类不能实例化。
3.我们可以使用abstract
关键字来创建抽象方法,抽象方法没有Body。
4.如果一个类有抽象的方法,那么这个类也应该使用抽象关键字进行抽象,否则不会编译。
5.抽象类不一定要有抽象方法。我们可以将一个类标记为抽象的,即使它没有声明任何抽象方法。
6.如果抽象类没有任何方法实现,最好使用接口,因为Java不支持多类继承。
7.Java中抽象类的子类必须实现所有抽象方法,除非该子类也是抽象类。
8.接口中的所有方法都是隐式抽象的,除非接口方法是静态的或默认的。接口中的静态方法和默认方法是在JAVA 8中添加的,更多详细信息请参阅JAVA 8接口changes。
9.Java抽象类可以实现接口,甚至不提供接口方法的实现。
Java抽象类用于为所有子类提供公共方法实现或提供默认实现。
11.如果Java中有main()
方法,我们可以像运行任何其他类一样运行抽象类。
这就是Java中抽象类的全部内容。如果我错过了什么重要的事情,请通过评论让我们知道。