java中的抽象类和抽象方法

ゝ一世哀愁。 2022-08-09 12:57 404阅读 0赞

使用关键字abstract定义的类叫做抽象类,在抽象类中可以包含抽象方法也可以不包含抽象方法,这意味着你在抽象类里边可以有具体的方法(有实现体)也可以有抽象方法(没有实现,没有括号,跟着分号)。抽象方法不能被实例化(不能创建抽象类的对象)

抽象类的声明:

在class前边加上abstract关键字,就使得这个类变成抽象类,看下边的代码:

  1. // Declaration using abstract keyword
  2. abstract class AbstractDemo{
  3. // Concrete method: body and braces
  4. public void myMethod(){
  5. //Statements here
  6. }
  7. // Abstract method: without body and braces
  8. abstract public void anotherMethod();
  9. }

因为抽象类允许创建具体的方法,因此,它并不是100%的抽象,你可以说它是提供了部分的抽象,而接口提供的100%的抽象。

记住下边这两条规则:

1、如果一个类有很少的抽象方法和具体方法,那么就声明一个抽象类。

2、如果一个类只有抽象方法,那就就声明一个接口。

像我们之前讨论的,不能初始化一个抽象类,下边的代码抛出一个异常错误:

  1. abstract public class AbstractDemo{
  2. public void myMethod(){
  3. System.out.println("Hello");
  4. }
  5. abstract public void anotherMethod();
  6. }
  7. public class ConcreteDemo{
  8. public void anotherMethod() {
  9. System.out.print("Abstract method");
  10. }
  11. public static void main(String args[])
  12. {
  13. //Can't create object of abstract class - error!
  14. AbstractDemo obj = new AbstractDemo();
  15. obj.display();
  16. }
  17. }

输出:

Unresolved compilation problem: Cannot instantiate the type AbstractEx1

注意:这个类继承自抽象类,就必须实现这个抽象类的抽象方法,否则,这个类也可以被声明为抽象类

为什么我们需要一个抽象类:

让我拿一个例子来说明这个问题,假设这里有一个Animal类,和一些其他类比如cat类、dog类、还有Horse类,这些类继承自Animal类,所以也就又很少的共同的习惯,现在你应该了解了那些上边那些类的用途,并且明白创建一个Animal类是没有什么意义的,因为你不能判断这个Animal类代表的是那个Animal,因此对于这种情况,我们创建一个抽象类然后再创建具体的类,然后相应的重写对应的方法,并且可以创建自己的方法。

抽象和具体的比较:

一个不是抽象类的类被称为是具体类,在上边的例子中,我说明了什么是Animal是抽象类,其他那三个是具体类。

关键的点是:

1、一个抽象类没有什么用,除非被其他的继承。

2、如果你在一个类里边定义了一个抽象方法,那么你也必须把这个类定义为抽象类,你不能在一个不是抽象类的类里边有抽象方法,翻过来却不一定是对的:一个类没有任何的抽象方法也可以被声明为抽象类、

3、抽象类可以没有抽象或者具体方法

好了,我们已经在上边讨论了一些抽象方法,下边我们来看一些简单的例子来更深的理解这个问题。

语法:

  1. public abstract void display();

对于抽象方法,我们需要记住的一些关键点:

1、抽象方法没有实现体

2、声明使用冒号结束

3、它必须是能够被重写的,一个抽象类必须能够被继承,同样的抽象方法必须是能够被重写的。

4、抽象方法必须要在抽象类中

注意:继承自抽象类的类必须要实现或者是重写所有的抽象方法

抽象类和抽象方法的例子:

  1. abstract class Demo1{
  2. public void disp1(){
  3. System.out.println("Concrete method of abstract class");
  4. }
  5. abstract public void disp2();
  6. }
  7. class Demo2 extends Demo1{
  8. /* I have given the body to abstract method of Demo1 class
  9. It is must if you don't declare abstract method of super class
  10. compiler would throw an error*/
  11. public void disp2()
  12. {
  13. System.out.println("I'm overriding abstract method");
  14. }
  15. public static void main(String args[]){
  16. Demo2 obj = new Demo2();
  17. obj.disp2();
  18. }
  19. }

输出:

  1. I'm overriding abstract method

发表评论

表情:
评论列表 (有 0 条评论,404人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java抽象抽象方法

    本文详细解释了 抽象类和抽象方法 的概念与使用,并深入介绍了 抽象类和抽象方法 的注意事项和细节,同时也介绍了模板设计模式,希望小伙伴们看后能有所收获!最后,如果本文有什...

    相关 Java抽象方法抽象

    1、 普通方法和抽象方法的区别 (1)在Java中,当一个类的方法被abstract关键字修饰时,该方法称为抽象方法。 (2)抽象方法所在的类必须定义为抽象类。 (3

    相关 java抽象抽象方法

    使用关键字abstract定义的类叫做抽象类,在抽象类中可以包含抽象方法也可以不包含抽象方法,这意味着你在抽象类里边可以有具体的方法(有实现体)也可以有抽象方法(没有实现,没有