面向对象之抽象类

抽象类(abstractclass)

定义:使用abstract关键字所修饰的类叫抽象类

作用:通过继承它实现多态,后期绑定,可以为将来要实现的东西做好接口,实现重用性。

为什么要使用抽象类和抽象方法?

a:防止父类被实例化,因为抽象类不能被实例化

b:体现多态思想:同一类型的对象,在运行的时候表现出不同的形态。

c:减少代码的重用

 

抽象类和抽象方法就是用来被继承的子程序进行重写的 所以抽象方法中不需要写任何代码

给你举个例子吧

abstract Animal{ //定义一个抽象类animal

  run{}  //定义animal类的一个抽象方法 run

}

方法中不写任何东西是因为不同的继承它的类的跑的方法不同 也就是说 不管你定义animal类的run方法,子类都是要重写的 既然如此 抽象类中只需写一个方法名 而不需要在方法中写任何东西.

 

实例理解:打个比方,要做一个游戏。如果要创建一个角色,如果反复创建类和方法会很繁琐和麻烦。建一个抽象类后。若要创建角色可直接继承抽象类中的字段和方法,而抽象类中又有抽象方法。如果一个角色有很多种职业,每个职业又有很多技能,要是依次实例这些技能方法会显得相当笨拙。定义抽象方法,在需要时继承后重写调用,可以省去很多代码。
总之抽象类和抽象方法起到一个框架作用。很方便后期的调用和重写
 
抽象方法是为了程序的可扩展性。重写抽象方法时即可实现同名方法但又非同目的的要求。 

注意:

1、         抽象类不能被实例化,不能new出来一个抽象类的实例

例如:abstract class T{

}

Tt=new T();不行,因为抽象类不能实例化

2、         抽象类必须被继承,抽象方法必须被重写。

3、         抽象方法只需声明,不能实现。

public abstractvoid Test();

 

抽象方法:

1、使用abstract关键字所修饰,并且有声明没有实现,叫抽象方法。

例如:public abstract void Test();后面不能有花括号,因为它没有实现。抽象方法需要定义在抽象类中,相对抽象方法,以前所定义的方法叫具体方法(有声明,有实现)。

 

抽象类与抽象方法联系:

1、         抽象方法一定要定义在抽象类中。

2、         如果一个类中包含了抽象方法,那么这个类一定是抽象类;要声明成abstract class;反之,如果某个类是抽象类,那么这个类可以包含抽象方法,也可以包含具体的方法。

3、         无论何种情况,只要一个类声明成了抽象类,那么该类就不能实例化

4、         在子类继承父类的情况下(父类是一个抽象类),那么该子类必须继承父类中所定义的所有的抽象方法,(重写抽象方法)否则,该类一定要声明成一个abstract class;

 

实例代码精讲:

public class AbstractTest         

{

   public static void main(String[] args)

   {

      Shape shape = new Triangle(12, 4);

      int area = shape.computeArea();

      System.out.println(area);

      shape = new Rectangle(25, 9);

      area = shape.computeArea();

      System.out.println(area);

   }

}

abstract class Shape

{

   public abstract int computeArea();

}

class Triangle extends Shape

{

   int width;

   int height;

   public Triangle(int width, int height)

   {

      this.width = width;

      this.height = height;

   }

   public int computeArea()

   {

      return (width * height) / 2;

   }

}

 

class Rectangle extends Shape

{

   int width;

   int height;

 

   public Rectangle(int width, int height)

   {

      this.width = width;

      this.height = height;

   }

 

   public int computeArea()

   {

      return width * height;

   }

}            

    在计算图形的面积的时候,不同的面积有不同的计算公式,但它总会有计算面积这个方法,所以当我们有新的图形出现要计算面积的时候,只需要继承Shape这个抽象类,然后我们会继承里面的抽象方法,当我们要定义公式去计算时,我们则需要重写方法,然后写出自己的计算公式。

总之抽象类和抽象方法起到一个框架作用。很方便后期的调用和重写

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值