疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

final关键字和抽象类的理解及总结


 

  首先就是我关于final关键字的一些理解。

  final作为一个修饰符,那么它有什么什么特点呢?

  1.可以修饰类,函数,变量。

  2.被final修饰的类不可以被继承。通常为了避免被继承,被子类复写功能而使用。

  3.被final修饰的方法不可以被复写。

  4.被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,又可以修饰局部变量。

  5.内部类只能访问被final修饰的局部变量。

  当在描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字,方便于阅读。

  而这些值不需要改变,所以加上final修饰。被final修饰的常量的书写要求所有的字母都大写,如果由多个单词组成,则单词通过 _ 连接,例如:

  public static final double MY_PI=3.14;

  关于final目前就说这么多把,毕竟自己学的不是太深入,以后会做一些延伸和拓展。那么再来说下关于抽象类的相关知识。

  当多个类中出现相同功能,但是功能主体不同。这时可以进行向上抽取,这时,只抽取功能定义,而不抽取功能主体。那么抽象类有那些特点呢?

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

  2.抽象方法和抽象类都必须被abstract关键字修饰。

  3.抽象类不可以用new创建对象,因为调用抽象方法没有意义。

  4.抽象类中的抽象方法要被使用,必须由子类复写其所有的抽象方法后建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

  那么在什么情况下才需要定义抽象类呢?

  在描述事物的过程中,该如何描述事物就如何描述事物,只不过该事物中出现了一些未知的部分。这些不确定的部分,也是该事物的功能,需要明确出来,但是无法定义主体。(abstract void study();不要大括号

  )这种情况下一般就

  要通过抽象方法来表示。

  抽象类比一般类多了抽象函数。也就是在类中可以定义抽象方法。并且抽象类不可以实例化。

  特殊情况下,抽象类中可以不定义抽象方法,但是这样做仅仅是为了不让该类建立对象。

  下面上一道关于抽象类的小练习。很简单,只是为了熟悉下抽象类的相关操作。

  package Test;

  /**

  * 假如我们在开发一个系统时,需要对员工进行建模,员工包含3个属性:

  * 姓名,工号以及工资。经理也是员工,除了含有员工的属性外,另外还

  * 有一个奖金属性。请使用继承的思想设计出员工类和经理类,要求类中

  * 提供必要的方法进行属性访问。

  *

  */

  abstract class Employee

  {

  private String name;

  private String id;

  private double pay;

  Employee(String name, String id, double pay)

  {

  this.name = name;

  this.id = id;

  this.pay = pay;

  }

  public abstract void work();//定义抽象方法,让子类去实现(复写),因为不确定其他调用的子类如何工作

  }

  class Manager extends Employee

  {

  private int bonus;

  Manager(String name, String id, double pay, int bonus)

  {

  super(name, id, pay);

  this.bonus = bonus;

  }

  public void work()

  {

  System.out.println("Manager Work");

  }

  }

  public class Test013

  {

  public static void main(String[] args)

  {

  // TODO Auto-generated method stub

  Manager ma = new Manager("zhangsan", "0915026105", 6000, 2000);

  ma.work();

  }

  }

  关于对抽象类和final关键字的总结,暂时告一段落。到目前已经学了2个可以修饰类的关键字,一个是public,一个是final。