注意比较: 5 K% M3 @8 o; N% F& f K8 B
private void print(){};此语句表示方法的空实现。
# w5 |, r* h1 ZAbstract void print(); 此语句表示方法的抽象,无实现。
/ `* C" O; M) o, k1 z: b2 ~! w " n% X- Z% `! b/ D
如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。
: r+ j5 `$ g% A反之,如果一个类为抽象类,那么其中可能有非抽象的方法。
1 O- c; A/ P0 K( h5 r9 m ' N$ K K0 K% Y. k/ e% f
如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须为抽象类,这与此类为非抽象冲突,所以报错。 8 o0 L6 c; ?- p0 g
- G' @/ P8 M3 O5 [& y
所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。 8 o% Q8 m3 Q! R9 H
为了实现多态,那么父类必须有定义。而父类并不实现,留给子类去实现。此时可将父类定义成abstract类。如果没有定义抽象的父类,那么编译会出现错误。
, [8 m0 v- Q$ ?2 b( {
6 |& U% E$ U" R1 n$ AAbstract和static不能放在一起,否则便会出现错误。(这是因为static不可被覆盖,而abstract为了生效必须被覆盖。) 6 N6 _+ @; w' V6 G' J& v: m
! }: g: V/ L) J2 {3 W例:(本例已存在\CODING\abstract\TestClass.java文件中) . X* S- f R% Z2 H2 R7 ^% P
public class TestClass{ - X+ {. m% e" l: y$ p; U- E
public static void main(String[] args){ * h) m- y4 d, h4 n( b4 _
SuperClass sc=new SubClass();
( ~; w% d! w9 N& G6 P+ W" @* K4 _# ]- e# kSc.print();
$ l8 h: \% s. C+ c1 `# y2 a} 1 I! z- p6 R- _+ E6 [
Abstract class SuperClass{
! P7 V Z6 a6 G, P+ m! e3 SAbstract void print();} 4 R2 a5 D, [. m7 T) [) S/ ?# u
}
9 I. S* [; F/ aclass SubClass extends SuperClass(){
5 K$ X4 g- ^' b( ~ void print(){ 9 c; e. ~- ~! z2 d! c
System.out.println(“print”);}
& u, z) d& `( v) h; p} |