前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >9.JAVA-抽象类定义

9.JAVA-抽象类定义

作者头像
诺谦
发布2019-05-24 20:33:37
6600
发布2019-05-24 20:33:37
举报
文章被收录于专栏:Linux驱动Linux驱动Linux驱动

1.抽象类

  • 抽象类,用来表示一个抽象概念.
  • 是一种只能定义类型,而不能产生对象的类,所以定义了抽象类则必须有子类的出现.
  • 抽象类的好处在于能够明确地定义子类需要覆写的方法
  • 抽象类需要使用abstract声明.
  • 抽象类里可以实现抽象方法,该方法特征在于:只有声明,并没有方法体(所以子类必须全部覆写,并且子类不能为抽象类)

比如图形(Shape)类, 就是一个抽象的概念,因为我们无法计算这个“图形”的面积,所以它的成员函数area()是空的。

而继承它的子类(矩形,椭圆形,三角形等)就可以去覆写area()成员函数. 里面通过数学公式,计算出面积.

参考图形(Shape)类,代码如下:

abstract class Shape       //抽象的图形类
{
         abstract public double area();        //abstract修饰的方法为抽象方法,无需实现方法体.但是必须被子类覆写
}

class Ellipse extends Shape    //椭圆类
{

         private double wr;  //椭圆的半径宽度
         private double hr;  //椭圆的半径高度

         public Ellipse(double wr,double hr)
         {
                  this.wr = wr;
                  this.hr = hr;
         }


         public double area(){
                  return 3.14159*wr*hr;
         }
}


public class Test{

         public static void main(String args[])
         {
                  //Shape s = new Shape();                //如果定义抽象类,则将会报错

                  Ellipse e = new Ellipse(2.5,1);
                  System.out.println("Ellipse area = "+e.area());
         }
}

需要注意的是:

  • 抽象类可以存在构造方法,用来初始化抽象类的属性,
  • 抽象类不能使用final定义,

2.抽象内部类定义

在java中,如果我们抽象类的子类只有一个的话,则可以将它封装为抽象内部类里,从而为用户隐藏了这个无需知道的类.在类库中很常见.

示例如下:

abstract class A       //抽象类
{

         abstract public void printData();//abstract修饰的方法为抽象方法,无需实现方法体.但是必须被子类覆写

         static private class B extends A      //需要在抽象类里隐藏的内部类
         {
                   private int Data=12;     
                   public void printData()
                   {
                          System.out.println("B Data:"+this.Data);       //打印内部类的Data值
                   }
         }

         static public A getInstance()           //获取实例
         {
                  return new B();                 //通过静态方法来获取要隐藏的静态抽象内部类  (静态方法里只能使用静态变量)
         }
}

public class Test{
         public static void main(String args[])
         {
                   A a = A.getInstance();
                   a.printData();                           //等价于: A.getInstance().printData();
         }
}

打印如下:

抽象类缺点:

  • 由于Java的单继承,每个类只能从一个抽象类继承.没有接口灵活.

下章学习: 10.JAVA-接口、工厂模式、代理模式、详解

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档