Java 抽象方法,没有主体的方法(没有实现)被称为抽象方法。方法必须始终在抽象类中声明,或者换句话说,如果类具有抽象方法,则应该将其声明为抽象方法。在上一个教程中我们讨论了抽象类,如果你还没有检查过它,请在这里阅读它: Java 中的抽象类,在阅读本指南之前。
这是一个抽象方法在 java 中的外观:
public abstract int myMethod(int n1, int n2);
如你所见,这没有函数体。
抽象方法规则
- 抽象方法没有正文,它们只有如上所示的方法签名。
- 如果一个类有一个抽象方法,它应该被声明为
abstract
,反之亦然,这意味着一个抽象类不需要一个抽象方法是强制性的。 - 如果常规类扩展了一个抽象类,那么该类必须实现抽象父类的所有抽象方法,或者它也必须被声明为
abstract
。
示例 1:抽象类中的抽象方法
//abstract class
abstract class Sum{
/* These two are abstract methods, the child class
* must implement these methods
*/
public abstract int sumOfTwo(int n1, int n2);
public abstract int sumOfThree(int n1, int n2, int n3);
//Regular method
public void disp(){
System.out.println("Method of class Sum");
}
}
//Regular class extends abstract class
class Demo extends Sum{
/* If I don't provide the implementation of these two methods, the
* program will throw compilation error.
*/
public int sumOfTwo(int num1, int num2){
return num1+num2;
}
public int sumOfThree(int num1, int num2, int num3){
return num1+num2+num3;
}
public static void main(String args[]){
Sum obj = new Demo();
System.out.println(obj.sumOfTwo(3, 7));
System.out.println(obj.sumOfThree(4, 3, 19));
obj.disp();
}
}
输出:
10
26
Method of class Sum
例 2:接口中的抽象方法
默认情况下,接口的所有方法都是公共抽象的。您不能在接口中使用具体的(常规方法和正文)方法。
//Interface
interface Multiply{
//abstract methods
public abstract int multiplyTwo(int n1, int n2);
/* We need not to mention public and abstract in interface
* as all the methods in interface are
* public and abstract by default so the compiler will
* treat this as
* public abstract multiplyThree(int n1, int n2, int n3);
*/
int multiplyThree(int n1, int n2, int n3);
/* Regular (or concrete) methods are not allowed in an interface
* so if I uncomment this method, you will get compilation error
* public void disp(){
* System.out.println("I will give error if u uncomment me");
* }
*/
}
class Demo implements Multiply{
public int multiplyTwo(int num1, int num2){
return num1*num2;
}
public int multiplyThree(int num1, int num2, int num3){
return num1*num2*num3;
}
public static void main(String args[]){
Multiply obj = new Demo();
System.out.println(obj.multiplyTwo(3, 7));
System.out.println(obj.multiplyThree(1, 9, 0));
}
}
输出:
21
0
参考: