本文实例讲述了Java的抽象方法和抽象类。分享给大家供大家参考,具体如下:
抽象方法是只有方法签的名,没有方法实现的方法。
抽象方法和抽象类必须使用抽象修饰符来定义,有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法。
抽象类和抽象方法的规则:
-
<李>抽象类必须使用抽象修饰符来修饰,抽象方法必须使用抽象修饰符来修饰,抽象方法不能有方法体。李>
<李>抽象类不定被实例化。即使抽象类里不包含抽象方法,这个抽象类也不能创建实例。李>
<李>抽象类可以包含成员变量,方法(普通方法和抽象方法),构造器,初始化块,内部类(接口,枚举)5种成分。抽象类的构造器不能用于创建实例,主要用于被其子类调用。李>
<李>含有抽象方法的类(包括直接定义一个抽象方法;或继承了一个抽象父类,但没有完全实现父类包含的抽象方法;或实现了一个接口,但没有完全实现接口包含的抽象方法三种情况)只能定义为抽象类。李>
1抽象类
公共抽象类形状 { { System.out.println(“执行形状的初始化块…”); } 私人字符串的颜色;//定义一个计算周长的抽象方法 公共抽象双calPerimeter ();//定义一个返回形状的抽象方法 公共字符串抽象方法();//定义形状的构造器,该构造器并不是用于创建形状对象,//而是用于被子类调用 公共形状(){} 公共形状(字符串的颜色) { System.out.println(“执行形状的构造器…”); 这一点。颜色=颜色; }//省略颜色的setter和getter方法 公共空间改变颜色(String颜色) { 这一点。颜色=颜色; } 公共字符串色鬼() { 返回this.color; } } >之前2三角形类
公共类三角形形状延伸 {//定义三角形的三边 私人的两倍; 私人双b; 私人双c; 公共三角形(字符串的颜色,一个的两倍 ,双b,双c) { 超级(颜色); 这一点。setSides (a, b, c); } 公共空间setSides(双,双b,双c) { 如果(祝辞=b + c | | b祝辞=a + c | | c祝辞=a + b) { System.out.println(“三角形两边之和必须大于第三边”); 返回; } 这一点。一个=; 这一点。b=b; 这一点。c=c; }//重写形状类的的计算周长的抽象方法 公共双calPerimeter () { 返回一个+ b + c; }//重写形状类的的返回形状的抽象方法 公共字符串方法() { 返回“三角形”; } } >之前3圈类
公共类圆形状 { 私人双半径; 公共圆(字符串的颜色,双半径) { 超级(颜色); 这一点。半径=半径; } 公共空间setRadius(双半径) { 这一点。半径=半径; }//重写形状类的的计算周长的抽象方法 公共双calPerimeter () { 返回2 *数学。π*半径; }//重写形状类的的返回形状的抽象方法 公共字符串方法() { 返回色鬼()+“圆形”; } 公共静态void main (String [] args) { s1=new三角形形状(“黑色”,3、4、5); 形状s2=new圆(“黄色”,3); System.out.println (s1.getType ()); System.out.println (s1.calPerimeter ()); System.out.println (s2.getType ()); System.out.println (s2.calPerimeter ()); } } >之前
执行形状的初始化块……
18.84955592153876 引用>
执行形状的构造器……
执行形状的初始化块……
执行形状的构造器……
三角形
12.0
黄色圆形
抽象不能用于修饰成员变量,不能用于修饰局部变量,即没有抽象变量,没有抽象成员变量等说法,抽象也不能用于修饰构造器,没有抽象构造器,抽象类里定义的构造器只能是普通构造器。
静态和抽象不能同时修饰某个方法,但它们可以同时修饰内部类。
抽象的关键字修饰的方法必须被子类重写才有意义,否则这个方法永远不会有方法体,因此抽象方法不能定义为私人访问权限,即私人和抽象不能同时修饰方法。
Java的抽象方法和抽象类实例详解