Java抽象类原理与用法实例详解

  

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

  

<强>一、抽象类的基本概念

  

普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法,普通方法,静态的方法,常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。

  

那么什么叫抽象方法呢?在所有的普通方法上面都会有一个“{}”,这个表示方法体,有方法体的方法一定可以被对象直接使用,而。

  

而。   

范例:定义一个抽象类

        抽象类{//定义一个抽象类   公共空间有趣(){//普通方法   System.out.println(“存在方法体的方法”);   }   公共抽象空白打印();//抽象方法,没有方法体,有抽象的关键字做修饰   }      之前      

<强>二,抽象类的使用

  

我们先看范例。

  

范例:直接实例化抽象类的对象

        包com.wz.abstractdemo;   抽象类{//定义一个抽象类   公共空间有趣(){//普通方法   System.out.println(“存在方法体的方法”);   }   公共抽象空白打印();//抽象方法,没有方法体,有抽象的关键字做修饰   }   公开课TestDemo {   公共静态void main (String [] args) {   一个=new ();   }   }      之前      

运行:   

  

异常的线程“主要”. lang。编译错误:未解决的问题:
  ,,,,,,不能实例化类型
  ,,,,,,com.wz.abstractdemo.TestDemo.main (TestDemo.java: 15)

     

从上可知,一个是抽象的,无法直接进行实例化操作。为什么不能直接实例化呢?当一个类实例化之后,就意味着这个对象可以调用类中的属性或者放过了,但在抽象类里存在抽象方法,而抽象方法没有方法体,没有方法体就无法进行调用。既然无法进行方法调用的话,又怎么去产生实例化对象呢。

  

抽象类的使用原则如下:

  

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

  

范例:         包com.wz.abstractdemo;   抽象类{//定义一个抽象类   公共空间有趣(){//普通方法   System.out.println(“存在方法体的方法”);   }   公共抽象空白打印();//抽象方法,没有方法体,有抽象的关键字做修饰   }//单继承   B类扩展了{//B类是抽象类的子类,是一个普通类   @Override   公共空间print(){//强制要求覆写   system . out。println (“Hello World !”);   }   }   公开课TestDemo {   公共静态void main (String [] args) {   A=new();//向上转型   a.print();//被子类所覆写的过的方法   }   }      之前      

运行结果:

  
  

Hello World !      

现在就可以清楚的发现:

  

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

  

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

  

<强>三,抽象类的使用限制

  

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

  

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

  

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

  

范例如下:

        包com.wz.abstractdemo;   抽象类{//定义一个抽象类   公众(){   System.out.println(“* * * * *类构造方法* * * * *”);   }   公共抽象空白打印();//抽象方法,没有方法体,有抽象的关键字做修饰   }//单继承   B类扩展了{//B类是抽象类的子类,是一个普通类   公共B () {   System.out.println (“* * * * * B类构造方法* * * * *”);   }   @Override   公共空间print(){//强制要求覆写   system . out。println (“Hello World !”);   }   }   公开课TestDemo {   公共静态void main (String [] args) {   A=new();//向上转型   }   }      

Java抽象类原理与用法实例详解