java中的抽象类和抽象方法

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

抽象类的声明:

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

// Declaration using abstract keyword
abstract class AbstractDemo{
   // Concrete method: body and braces
   public void myMethod(){
      //Statements here
   }

   // Abstract method: without body and braces 
   abstract public void anotherMethod();
}

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

记住下边这两条规则:

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

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

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

abstract public class AbstractDemo{
   public void myMethod(){
      System.out.println("Hello");
   }
   abstract public void anotherMethod();
}
public class ConcreteDemo{

   public void anotherMethod() { 
        System.out.print("Abstract method"); 
   }
   public static void main(String args[])
   { 
      //Can't create object of abstract class - error!
      AbstractDemo obj = new AbstractDemo();
      obj.display();
   }
}

输出:

Unresolved compilation problem: Cannot instantiate the type AbstractEx1

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

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

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

抽象和具体的比较:

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

关键的点是:

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

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

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

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

语法:

public abstract void display();

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

1、抽象方法没有实现体

2、声明使用冒号结束

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

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

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

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

abstract class Demo1{
   public void disp1(){
     System.out.println("Concrete method of abstract class");
   }
   abstract public void disp2();
}

class Demo2 extends Demo1{
   /* I have given the body to abstract method of Demo1 class
   It is must if you don't declare abstract method of super class
   compiler would throw an error*/  
   public void disp2()
   {
       System.out.println("I'm overriding abstract method");
   }
   public static void main(String args[]){
       Demo2 obj = new Demo2();
       obj.disp2();
   }
}

输出:

I'm overriding abstract method

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值