该用户从未签到
|
abstract class 抽象类--不具体的类
( I, Q, t4 Z( G! U9 ~' M) x* P3 f( ?! \9 n; `: J! {
abstract: 抽象的, 是指不够具体, 概念性的/ o1 [/ m e! ~, g4 G2 f5 i9 ?8 H
: N* }$ O6 p3 ]! m, l 1) 抽象方法,只有行为的概念,没有具体的行为实现。
5 t) M, h9 L3 E7 c* [8 H 使用:abstract 关键字修饰,并且没有方法体。5 z/ ^! h0 T9 F. B
2) 包含抽象方法的类,就一定是抽象类。
/ s1 C0 ]: h+ x- k# P 使用: abstract 关键字修饰,包含抽象方法。
A' v5 l9 t) N. @" v2 l: K 如:平面图形一定可以计算面积。
( u9 t' P6 {' k [9 l* [4 K; V7 y4 O7 g0 H3 _& @
3) 抽象类不能直接创建实例。可以定义引用变量。: x( L: ?7 K- P9 ~. {
4) 抽象类只能被继承,一个具体类继承一个抽象类,必须实" c8 M$ X: `$ `" M/ B
现所有抽象方法。
- A- i: |. ]5 `9 e, v- ~: a 5) 抽象方法和抽象类非常适合作为系统的分析和设计的工具。
$ s- }+ c: ~: k9 w: `, m public class abstract CRMSystem{8 z6 y* s: J; u1 ~5 e
public abstract Client add(Client newGuy);, L( z' O0 Z) i. e0 ?' v- _) v8 t
public abstract Event add(Event e, Client guy);, f9 ^3 Y5 V8 c. u$ r
public abstract Event[] todayEvents();
0 p; Y: o/ G) y+ p8 O+ f Z }
8 ]% W* c1 n; {/ Z3 Y! D9 x5 }8 B3 F' m) ^/ @: e( o5 x/ N y* g! g
接口, 相当于纯抽象类(cpp纯虚类)1 N# Z' m5 N9 p7 v d+ V
1 接口:全部的方法都是抽象方法,全部的属性都是常量。5 n2 I3 R4 I3 J4 i7 x
接口用来表示纯抽象概念,没有任何具体的方法和属性。
# A, H: u5 z2 P' D public interface CRMSystem{, t" A$ d. A7 L# X7 J- ^+ l P0 \; D
Client add(Client newGuy);2 Q( H1 S, B5 U# o9 i
Event add(Event e, Client guy);+ q' L. P% x% o2 [* l/ ]6 q( W
Event[] todayEvents();" L/ r; g3 N B6 \, b" z p
}
$ f0 P5 ~2 Q1 K8 T p/ n 2 不能实例化,可以定义变量。 }' }3 r& k% X+ |
3 接口变量可以引用具体实现类的实例。
3 c% E8 ^( n4 x% b. t8 q 4 接口只能被实现(继承),一个具体类实现接口,必须使用全部的 D6 u$ | l# |- [
抽象方法。8 q; y) g. V( x
5 接口之间可以继承。
0 [4 u- |, u: W r: S" u7 k: t) B 6 一个具体类可以实现多个接口,实现多继承现象,表示:
& y3 n; A5 O5 l 一个概念即是XXX也是XXX.
/ u$ v% }7 ]2 r* o J 7 接口中的属性,默认是常量 public static final ' w: `: X+ Y0 Q4 _$ Z
8 接中的方法一定是:public abstract 5 \6 t/ R4 D8 U4 {- I# h. o" I
9 实现一个接口,使用关键字implements, 实现实际上是
+ d, v- T: ^( C# \# q1 ^( v# z 一种继承关系。接口和实现类是父子类型的关系
' T) ?( \! D2 E: O& z2 G! s$ J& u* J$ Z
% j; F0 L7 D+ x2 o% ?. _' v4 J$ }' }$ V3 m4 o. g
|
|