二、Java面向对象(14)_抽象类和抽象方法

2018-05-06

 

抽象类和抽象方法

 

一、抽象的使用

  当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]。

  我们都知道,父类是将子类所共同拥有的属性和方法进行抽取,这些属性和方法中,有的是已经明确实现了的,有的还无法确定,那么我们就可以将其定义成抽象,在后日子类进行重用,进行具体化。这样,抽象类也就诞生了。

  例如,定义了“动物”父类,其中“动物名称”和“动物年龄”属性已经明确了,但是“动物叫”的方法没有明确,此时就可以将“动物叫”定义为抽象方法。

  所以,抽象类是为了把相同的但不确定的东西的提取出来,为了以后的重用。定义成抽象类的目的,就是为了在子类中实现抽象类。 

二、抽象方法

  java中的抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。

  特点:

  1、使用abstract修饰,没有方法体,子类应该覆盖(实现)父类的所有抽象方法。

  2、抽象方法不能使用private,final,以及static修饰。

    子类不能访问父类的private方法,final修饰的方法不能被继承,static是类级别,此时不叫覆盖而是称之为隐藏。

  3、抽象方法必须定义在抽象类或接口中(如果一个方法存在在一个类中,那么这个类必须使用abstract来修饰)。

三、抽象类

  当一个方法为抽象方法时,意味着这个方法应该被子类的方法所重写,否则其子类的该方法仍然是abstract的,这个子类由于继承父类,拥有抽象方法,因此它也是抽象类,即声明为abstract。

  abstract抽象类不能用new实例化对象,abstract方法只允许声明不能实现。如果一个类中含有abstract方法,那么这个类必须用abstract来修饰,当然abstract类也可以没有abstract方法。

  特点:

  1、抽象类不能用new实例化对象。

  2、抽象类中不一定要包含abstrace方法。也就是,抽象中可以没有abstract方法。一旦类中包含了abstract方法,那类该类必须声明为abstract类。

  3、如果子类没有实现(覆盖)父类的所有抽象方法,那么子类也是抽象类(因为此时子类的方法还是抽象方法,而抽象方法所在的类必然是抽象类)。

  4、抽象类的构造方法不能声明为private,否则不能有子类(创建子类对象前先调用父类方法)。

  5、抽象类不能声明为final,因为必须要有子类,抽象方法才得以实现。

  6、抽象类不完整,必须要有子类,功能才得以实现。

抽象类中可以不存在抽象方法,可以防止外界创建对象。

  

四、抽象类和普通方法的区别

  普通类所具有的成员(字段、方法、构造器),抽象类都可以存在。

  区别在于:抽象类不能创建对象,且抽象类可以存在抽象方法。

  

猜你喜欢

转载自www.cnblogs.com/sunNoI/p/8997537.html