`
bingzhen66
  • 浏览: 36533 次
文章分类
社区版块
存档分类
最新评论

21.黑马程序员-抽象类与抽象方法

 
阅读更多

------- android培训java培训、期待与您交流! ----------

1.概念:
  • 含有abstract修饰符的class即为抽象类。
  • 当多个类中出现相同功能,但是功能主体( {}中的函数代码)不同,可以进行向上抽取。这时,只抽取功能定义(函数定义),而不抽取功能主体。这种只有函数定义的函数叫抽象函数,它所在的类就是抽象类。
  • 如何保证一个类不被实例化哪?只要将这个类声明为抽象类即可。使用 abstract关键字即可,如下:

  • public abstract class Employee {
        private String name;
        private double salary;
        //TBC
    }
    
2.抽象类的特点:
  • 抽象类为什么不能实例化?因为安全,抽象类中可能有没有方法体的方法,调用时会发生错误。
  • 抽象方法、抽象类都使用abstract关键字修饰。
  • 抽象类中可以没有抽象方法,但是抽象方法一定在抽象类中

  • abstract 可以修饰类和方法,代表未实现的方法或者不可实现的类。类的不可实现就是用该类的方法无法创建对象。
  • 抽象类中的方法要被使用,必须由子类复写其所有的抽象方法后,建立子类对象调用。只复写部分抽象方法还是抽象类。
3.抽象类的例子:
  • 父类Employee中定义了一个方法:

  • public void setSalary(double salary,double rate) {
           this.salary = salary*(1+rate);
        }
    
    
  • 但是如果子类Sales和Trainer虽然都需要实现这个业务逻辑,但是实现方式 却都不相同,如Sales如下:

  • public void setSalary(double salary, double rate) {
           this.salary = salary*(1+2*rate);
        }
    
  • Trainer类的如下:

public void setSalary(double salary, double rate) {
       this.salary = salary*(1+0.5*rate);
    }


4.抽象方法的定义

public abstract void setSalary(double salary,double rate) ;


5.抽象类的作用:

  • 强迫子类复写一些功能。
  • 抽象类该如何描述事物,就如何描述事物,只不过,该事物出现了一些未实现的方法,需要明确实现。但是无法定义主体。通过抽象方法来实现。需要子类实现。
  • 抽象类比一般类多了抽象函数,就是在类中可以定义抽象方法。不可实例化。
  • 抽象类在公司通常不是由程序员定义的,而是由项目经理或者某个模块得设计人员。设计抽象类得原因通常只有一个:为了规范方法名。咱们都知道,抽象类必须要继承,不然没法用,作为模块设计者,可以把让底层程序员直接用得方法直接调用,而一些需要让程序员覆盖后自己做得方法则定义称抽象方法。
6.注意:
  • 抽象类可以不定一抽象方法,这样做仅仅是不让该类创建对象。
  • 没有抽象变量。
  • 需要注意的是,抽象方法是没有方法体的,声明后直接使用;结束。

    抽象方法和抽象类之间的关系是:

    1) 抽象类中不一定有抽象方法

    2) 有抽象方法的类一定是抽象类

    因此,如果一个类继承的父类中有抽象方法,那么子类必须实现其抽象方法 ,否则子类也必须声明为抽象类。

    很多初学者会不太理解抽象类的作用,尤其抽象方法,觉得既然连实现逻辑 都没有,又何必声明?抽象类,抽象方法都是Java中非常重要的概念,抽象类是 多个子类共同特征的体现,抽象方法是子类共同行为的规范。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics