现在的位置: 首页 > 编程语言 > 正文

Java抽象类和抽象方法定义与用法实例详解

2020年02月13日 编程语言 ⁄ 共 3049字 ⁄ 字号 评论关闭

本文实例讲述了Java抽象类和抽象方法定义与用法。分享给大家供大家参考,具体如下:

一、Java抽象类

参考资料:Java抽象类 详解

1、抽象类的说明

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

在Java语言中使用abstract class来定义抽象类

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

2、抽象类的定义

abstract class A{//定义一个抽象类 public void fun(){//普通方法 System.out.println("存在方法体的方法"); } //不存在方法体的抽象方法 public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰}

3、抽象类的使用

抽象类的使用原则如下:

(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;(2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;(3)抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;(4)子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。);

package com.wz.abstractdemo;abstract class A{//定义一个抽象类 public void fun(){//普通方法 System.out.println("存在方法体的方法"); } public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰}//单继承class B extends A{//B类是抽象类的子类,是一个普通类 @Override public void print() {//强制要求覆写 System.out.println("Hello World !"); }}public class TestDemo { public static void main(String[] args) { A a = new B();//向上转型 a.fun();//被子类所覆写的过的方法 }}

(1)抽象类的子类里面有明确的方法覆写要求,而普通类可以有选择性的来决定是否需要覆写;(2)抽象类实际上就比普通类多了一些抽象方法而已,其他组成部分和普通类完全一样;(3)普通类对象可以直接实例化,但抽象类的对象必须经过向上转型之后才可以得到。

虽然一个类的子类可以去继承任意的一个普通类,可是从开发的实际要求来讲,普通类尽量不要去继承另外一个普通类,而是去继承抽象类。

4、抽象类的使用限制

(1)抽象类中有构造方法么?

由于抽象类里会存在一些属性,那么抽象类中一定存在构造方法,其存在目的是为了属性的初始化。

并且子类对象实例化的时候,依然满足先执行父类构造,再执行子类构造的顺序。

范例如下:

package com.wz.abstractdemo;abstract class A{//定义一个抽象类 public A(){ System.out.println("*****A类构造方法*****"); } public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰}//单继承class B extends A{//B类是抽象类的子类,是一个普通类 public B(){ System.out.println("*****B类构造方法*****"); } @Override public void print() {//强制要求覆写 System.out.println("Hello World !"); }}public class TestDemo { public static void main(String[] args) { A a = new B();//向上转型 }}

执行结果:

*****A类构造方法**********B类构造方法*****

(2)抽象类可以用final声明么?

不能,因为抽象类必须有子类,而final定义的类不能有子类;

二、Java抽象方法

参考资料:JAVA抽象类和抽象方法

用abstract修饰的方法,即抽象方法。并且,抽象方法不能有方法主体。格式如下:

abstract void xxx();

说明:

    一旦类中包含了abstract抽象方法,那类该类必须声明为abstract类。 抽象类中不一定要包含abstrace方法。 抽象类不能被实例化。因为抽象类中方法未具体化,这是一种不完整的类,所以直接实例化也就没有意义了。 任何子类必须重写父类的抽象方法,或者声明自身为抽象类

范例:bstract关键字可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。

抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。

public abstract class Employee{ private String name; private String address; private int number; public abstract double computePay(); //其余代码}

如果Salary类继承了上面的Employee抽象类,那么它必须实现computePay()方法:

/* 文件名 : Salary.java */public class Salary extends Employee{ private double salary; // Annual salary public double computePay() { System.out.println("Computing salary pay for " + getName()); return salary/52; } //其余代码}

【抽象类总结规定】

    抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。 构造方法,类方法(用static修饰的方法)不能声明为抽象方法。 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

本文标题: Java抽象类和抽象方法定义与用法实例详解

以上就上有关Java抽象类和抽象方法定义与用法实例详解的全部内容,学步园全面介绍编程技术、操作系统、数据库、web前端技术等内容。

抱歉!评论已关闭.