o o p w i t h j a v a
play

O O P w i t h J a v a Y u a n b i n Wu c s @e c - PowerPoint PPT Presentation

O O P w i t h J a v a Y u a n b i n Wu c s @e c n u O O P w i t h J a v a P 3 9 r o j e c t 4 : 1 1 U p c a s t i n g


  1. O O P w i t h J a v a Y u a n b i n Wu c s @e c n u

  2. O O P w i t h J a v a ● 通知 – P 月 3 日晚 9 点 r o j e c t 4 : 1 1

  3. ● 复习 – U p c a s t i n g ● 同一基类的不同子类可以被视为同一类型 ( 基类 ) ● 放宽类型一致性 ● 简化接口 c l a s s A { … } c l a s s A { … } c l a s s B { … } c l a s s B e x t e n d s A { … } A a = n e w A ( ) ; A a = n e w A ( ) ; B b = n e w B ( ) ; B b = n e w B ( ) ; / / A a = n e w B ( ) ; c o m p i l e e r r o r A a = n e w B ( ) ; / / u p c a s t i n g

  4. ● 复习 – 多态 c l a s s I n s t r u m e n t { p u b l i c c l a s s M u s i c { p u b l i c v o i d p l a y ( i n t n o t e ) { p u b l i c s t a t i c v o i d t u n e ( I n s t r u m e n t i ) { S y s t e m . o u t . p r i n t l n ( “ I n s t r u m e n t . p l a y ( ) ” + n ) ; i . p l a y ( ) ; } } } p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) { Wi n d fl u t e = n e w Wi n d ( ) ; S t r i n g e d v i o l i n = n e w S t r i n g e d ( ) ; B r a s s f r e n c h H o r n = n e w B r a s s ( ) ; p u b l i c c l a s s Wi n d e x t e n d s I n s t r u m e n t { t u n e ( fl u t e ) ; p u b l i c v o i d p l a y ( i n t n o t e ) { t u n e ( v i o l i n ) ; S y s t e m . o u t . p r i n t l n ( “ Wi n d . p l a y ( ) ” + n ) ; t u n e ( f r e n c h H o r n ) ; } } } } p u b l i c c l a s s S t r i n g e d e x t e n d s I n s t r u m e n t { p u b l i c v o i d p l a y ( i n t n o t e ) { S y s t e m . o u t . p r i n t l n ( “ S t r i n g e d . p l a y ( ) ” + n ) ; } } 多态 ( P o l y m o r p h i s m ) 参数 I 可以代表不同的子类 , 并能 n s t r u m e n t i p u b l i c c l a s s B r a s s e x t e n d s I n s t r u m e n t { 正确调用它们的方法 ( 即 , 有多种表现形态 ) p u b l i c v o i d p l a y ( i n t n o t e ) { S y s t e m . o u t . p r i n t l n ( “ B r a s s . p l a y ( ) ” + n ) ; } }

  5. ● 复习 – 静态绑定 ● 函数的调用在编译后便确定 , 也称为 e a r l y b i n d i n g ● 优点 : 快速 , 易于 d 缺点 : 接口繁琐 e b u g , – 动态绑定 ● 函数的调用在运行时才能确定 也称 l a t e b i n d i n g ● 优点 : 接口简洁 缺点 : 函数调用需要额外开销 – J 中的所有方法都采用动态绑定 , 除了 a v a ● fi n a l ● S t a t i c – 数据成员不动态绑定

  6. O O P w i t h J a v a ● 抽象类 ● 接口 – 定义 – 实现多个接口 – 扩展接口 – 接口适配器 – 应用 : 工厂模式

  7. 抽象类 ● 父类的方法 I n s t r u m e n t – I n s t r u m e n t : p l a y ( ) p l a y ( ) ● 子类重写父类的方法 – Wi n d : p l a y ( ) Wi n d S t r i n g e d B r a s s p l a y ( ) p l a y ( ) p l a y ( ) – S t r i n g e d : p l a y ( ) – B r a s s : p l a y ( ) p u b l i c c l a s s M u s i c { ● 可扩展性 p u b l i c s t a t i c v o i d t u n e ( I n s t r u m e n t i ) { i . p l a y ( ) ; } – 用户程序仅知父类方法 p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) { Wi n d fl u t e = n e w Wi n d ( ) ; – 子类修改不会影响用户程序 S t r i n g e d v i o l i n = n e w S t r i n g e d ( ) ; B r a s s f r e n c h H o r n = n e w B r a s s ( ) ; t u n e ( fl u t e ) ; t u n e ( v i o l i n ) ; t u n e ( f r e n c h H o r n ) ; } }

  8. 抽象类 ● 如果所有子类都将重写该方法 – I 是否还必要 ? n s t r u m e n t : p l a y ( ) ● 是否有机制 : – 在父类中不指定该方法的具体实现 – 禁止调用父类的该方法 I n s t r u m e n t p l a y ( ) Wi n d S t r i n g e d B r a s s p l a y ( ) p l a y ( ) p l a y ( )

  9. 抽象类 ● 抽象方法 ( a b s t r a c t m e t h o d ) – 仅提供方法的名称 , 参数和返回值 – 没有具体实现 – 使用 a 关键字 b s t r a c t c l a s s I n s t r u m e n t { a b s t r a c t c l a s s I n s t r u m e n t { p u b l i c v o i d p l a y ( i n t n o t e ) { p u b l i c a b s t r a c t v o i d p l a y ( i n t n o t e ) ; S y s t e m . o u t . p r i n t l n ( “ I n s t r u m e n t . p l a y ( ) ” + n ) ; } } } 普通方法 抽象方法

  10. 抽象类 ● 抽象类 ( a b s t r a c t c l a s s ) – 包含抽象方法的类称为抽象类

  11. 抽象类 a b s t r a c t c l a s s I n s t r u m e n t { ● 抽象类 p u b l i c a b s t r a c t v o i d p l a y ( i n t n o t e ) ; } p u b l i c c l a s s Wi n d e x t e n d s I n s t r u m e n t { p u b l i c v o i d p l a y ( i n t n o t e ) { S y s t e m . o u t . p r i n t l n ( “ Wi n d . p l a y ( ) ” + n ) ; } } p u b l i c c l a s s S t r i n g e d e x t e n d s I n s t r u m e n t { p u b l i c v o i d p l a y ( i n t n o t e ) { S y s t e m . o u t . p r i n t l n ( “ S t r i n g e d . p l a y ( ) ” + n ) ; } } p u b l i c c l a s s B r a s s e x t e n d s I n s t r u m e n t { p u b l i c v o i d p l a y ( i n t n o t e ) { S y s t e m . o u t . p r i n t l n ( “ B r a s s . p l a y ( ) ” + n ) ; } }

  12. 抽象类 ● 是否能直接创建抽象类的对象 ? – 否 – 抽象类是不完整的类 – 其中的抽象方法需要在子类补充完整 ( 重写 ) 后才有 意义

  13. 抽象类 ● 无法直接创建该类的对象 a b s t r a c t c l a s s I n s t r u m e n t { p u b l i c a b s t r a c t v o i d p l a y ( i n t n o t e ) ; } c l a s s T e s t { p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) { / / I n s t r u m e n t i n = n e w I n s t r u m e n t ( ) ; / / c o m p i l e e r r o r : c a n n o t c r e a t e i n s t a n c e s o f a n a b s t r a c t c l a s s } } 关键字? s u p e r

  14. 抽象类 a b s t r a c t I n s t r u m e n t a b s t r a c t v o i d p l a y ( ) ; S t r i n g w h a t ( ) { / * … * / } e x t e n d s Wi n d S t r i n g e d P e r c u s s i o n v o i d p l a y ( ) v o i d p l a y ( ) v o i d p l a y ( ) S t r i n g w h a t ( ) S t r i n g w h a t ( ) S t r i n g w h a t ( ) e x t e n d s Wo o d w i n d B r a s s v o i d p l a y ( ) v o i d p l a y ( ) S t r i n g w h a t ( ) S t r i n g w h a t ( )

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend