SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Reusing Class
Agenda
•   概述
•   组合
•   继承
•   子类初始化
•   super关键字
•   委托
•   @Override注解
•   继承 vs. 组合
•   protected
•   向上转型
•   final关键字
概述
• 不要重复自己(Don’t Repeat Yourself/DRY)是
  编码的一个基本原则. 重复会带来极严重的
  代码可维护性问题.
• Java通过继承或者组合的方式实现对已有类
  功能的重用;
组合
• 组合是指在一个java类中引用另一个类的对象, 访问
   该类的成员及方法从而达到重用的目的. 比如: 一个
   喷水系统需要有水源装置, 这里创建2个类
   SprinklerSystem/WaterSource, 其中SprinklerSystem将
   会重用WaterSource类, 示例:
class WaterSource {......}
class SprinklerSystem{
   WaterSource source; // 通过组合进行重用
   ......
}
• 示例: demo/Demo1.java
继承
• 当创建一个自定义的class时就会发生继承:
1), 显式使用extends关键字继承某个类;
2), 如果没有显式继承, 新建的类会自动继承Object基类.
• 通过继承, 父类的方法可以在子类调用, 从而达到重用的目的; 比如:
class Parent {
    void f1();
    void f2();
}
class Child extends Parent {...}
// 调用父类的方法
Child c = new Child();
c.f1();
c.f2();
• 示例: demo/Demo2.java
子类初始化
• 通过继承得到的子类是如何进行初始化的
  呢? 在进行子类的初始化之前, 需要先逐级
  对基类进行初始化(Java中可以显式调用基类的构造器进行
  初始化, 如果不指定则调用基类的默认构造器),基类初始化完
  毕之后会产生一个基类子对象, 该子对象将
  会被之后创建的子类对象引用. 接下则会开
  始子类的初始化工作;
• 示例: demo/Demo3.java
子类初始化
• 参考:
        Class A           Note: 以创建一个C类对象为例
                          C c = new C();
 2          extends   3
                          需要按如下顺序执行:
        Class B           1, 先需要对C的基类B进行初始化;
                          2, B还有基类A, 先进行基类A的初始化;
                          3, A初始化完毕, 执行B的初始化;
 1          extends   4   4, B初始化完毕, 执行C的初始化

        Class C
super关键字
• 默认情况下初始化子类时会调用父类的默
  认构造器, 可以在子类的构造器中通过super
  调用指定的父类构造器, 比如:
Class A {
   A() {...}
   A(int i) {...}
}
Class B {
   B(int i) {super(i); ...} // 调用基类的A(int)构造器
}
• 示例: demo/Demo4.java
委托
                 Delegation
• 委托是介于继承和组合之间的重用方式, 通过保存某个
   类对象的引用(组合), 并且提供与该类相同的接口(继承),
   示例:
Class A {
   void f1(int i) {...}
   String f2() {...}
}
Class B {
   A a = new A();               // 保存A对象的引用
   void f1(int i) {a.f1(i);}    // 一致的接口, 并调用A的方法
   String f2() {return a.f2();}
}
• 示例: demo/Demo5.java
@Override注解
• @Override注解用于表示子类覆盖了基类中的某个方法,
   如果实际没有发生覆盖, 那么会产生编译错误, 示例:
class A {
   void f1() {...}
   void f2(int i) {...}
}
class B extends A {
   @Override void f1() {...}
   // @Override void f2(String s) {...} // 编译错误, 重载而非覆盖
}
继承 vs. 组合
• 如何在继承与组合之间做出选择? 取决于是
  否需要提供与被重用类相同的接口, 如果需
  要则使用继承, 否则使用组合; 另外继承表
  达的是一种is-a的关系, 因此需要额外从类本
  身的建模意义上进行考虑.
• demo/Demo6.java
protected
• 类的受保护成员允许当前类, 子类, 以及同一
  个包下面的其他类访问(package access);
• 尽管java提供了受保护访问权限, 但是仍建
  议优先使用private权限;
• 示例: demo/Demo7.java
向上转型
              Upcasting
• 向上转型是指将对象赋值给指向其父类的引用, 比如Class
    B extends A {...}, 可以编写如下代码:
A obj = new B(); // 这里创建B对象, 赋值给指向A的引用
• 向上转型始终是安全的, 继承本身表示的就是一种is-a关
    系;
• 在调用方法时经常会发生向上转型; 示例:
方法声明:
void f(java.util.List list);
方法调用:
java.util.List list = new ArrayList();
...
f(list); // Upcasting, 由ArrayList到List
final关键字
• final关键字在不同的使用场合下会有不同的
  意义, 大体上用来声明某个类/成员是不可改
  变的;
• final类:  表示该类不能被继承;
• final方法: 表示该方法不能被子类覆盖;
• final属性: 表示该属性不能被修改;
• final参数: 该参数在方法里面不能被修改;
final类
• 出于设计的原因, 某个不应该被继承, 可以将
   它声明为final; 这通常见于某些工具类.
• 示例:
final Class A {......}
class B extends A {...} // 编译错误
final方法
• 出于两个原因, 可以将方法声明为final:
1), 该方法不应该在子类中被覆盖;
2), 效率; 将方法声明为final, 可以在一定程度上提高效
   率.
• 示例:
class A{
   public final void f()...
}
class B extends A {
   public void f()... // 编译错误, final方法不能被覆盖
}
• 示例: demo/Demo8.java
Pitfall: private method
• private方法默认是final的, 不能在子类中覆盖一
   个private方法; 如果你在子类重写了一个private
   方法, java编译器不会对此提出警告.
• 示例:
class A {
   private void f() ... // 默认为final
}
class B extends A {
   public void f() ...  // 不是覆盖
}
final方法参数
• 当使用final修饰方法的形参时, 该参数在方法调用过
   程中不能被重新赋值:
1), 如果该参数是原语类型, 那么该参数不能被重新赋
   值, eg:
void f(final int i)...
在方法体内, 不能使用 i = ...重新赋值
2), 如果该参数是某个引用类型, 则表示该引用不能指
   向其他的对象, eg:
void f(final List list)...
不能使用list = ...进行赋值, 但是可以对象本身的内容可
以改变, 比如在方法内调用list.add(...)
• 示例: demo/Demo9.java
final属性
• 将属性声明为final,
1), 如果属性在声明时进行了初始化, 那么该属
性不能被重新赋值; eg:
final int i = 0; // i 不能被重新赋值
2), 如果声明时没有初始化(Blank final), 那么必
须在构造器中对该属性进行初始化; eg:
class A {
    final int i;
    A() {
            i = 3;
    }
}
• final经常与static结合使用用于声明常量(Constants), eg:
public static final int VALUE_ONE = 1;
• 示例: demo/Demo10.java
END

Weitere ähnliche Inhalte

Andere mochten auch

Copia de experiencia de aula
Copia de experiencia de aulaCopia de experiencia de aula
Copia de experiencia de aulaolguita1975
 
Informatie, Middel Voor Gezonde Sturing
Informatie, Middel Voor Gezonde SturingInformatie, Middel Voor Gezonde Sturing
Informatie, Middel Voor Gezonde SturingDaan Blinde
 
4, grep
4, grep4, grep
4, grepted-xu
 
Handleiding Forecast Solution Shared
Handleiding Forecast Solution SharedHandleiding Forecast Solution Shared
Handleiding Forecast Solution SharedDaan Blinde
 
2, object oriented programming
2, object oriented programming2, object oriented programming
2, object oriented programmingted-xu
 
Master Genzyme Presentation
Master Genzyme PresentationMaster Genzyme Presentation
Master Genzyme Presentationengelske
 
три дерева - Three Trees
три дерева - Three Treesтри дерева - Three Trees
три дерева - Three TreesFreekidstories
 

Andere mochten auch (14)

cv
cvcv
cv
 
Copia de experiencia de aula
Copia de experiencia de aulaCopia de experiencia de aula
Copia de experiencia de aula
 
Informatie, Middel Voor Gezonde Sturing
Informatie, Middel Voor Gezonde SturingInformatie, Middel Voor Gezonde Sturing
Informatie, Middel Voor Gezonde Sturing
 
Harsh Pershad (Innovate UK) presenting 'Funding Opportunities from Innovate U...
Harsh Pershad (Innovate UK) presenting 'Funding Opportunities from Innovate U...Harsh Pershad (Innovate UK) presenting 'Funding Opportunities from Innovate U...
Harsh Pershad (Innovate UK) presenting 'Funding Opportunities from Innovate U...
 
4, grep
4, grep4, grep
4, grep
 
01 Gedda Jfk2009
01 Gedda Jfk200901 Gedda Jfk2009
01 Gedda Jfk2009
 
Handleiding Forecast Solution Shared
Handleiding Forecast Solution SharedHandleiding Forecast Solution Shared
Handleiding Forecast Solution Shared
 
2, object oriented programming
2, object oriented programming2, object oriented programming
2, object oriented programming
 
Каталог Bravolli
Каталог BravolliКаталог Bravolli
Каталог Bravolli
 
Master Genzyme Presentation
Master Genzyme PresentationMaster Genzyme Presentation
Master Genzyme Presentation
 
Formation Gestalt IFFP 2017
Formation Gestalt IFFP 2017Formation Gestalt IFFP 2017
Formation Gestalt IFFP 2017
 
Seo in raipur
Seo in raipurSeo in raipur
Seo in raipur
 
три дерева - Three Trees
три дерева - Three Treesтри дерева - Three Trees
три дерева - Three Trees
 
Welcome To Deep Tissue Massage
Welcome To Deep Tissue MassageWelcome To Deep Tissue Massage
Welcome To Deep Tissue Massage
 

Ähnlich wie 7, reusing classes

Class Inheritance
Class InheritanceClass Inheritance
Class Inheritancefinian lau
 
Java面试32题
Java面试32题Java面试32题
Java面试32题yiditushe
 
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanupted-xu
 
10, inner classes
10, inner classes10, inner classes
10, inner classested-xu
 
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘Liu Allen
 
Java面试知识
Java面试知识Java面试知识
Java面试知识yiditushe
 
Java基础方面
Java基础方面Java基础方面
Java基础方面yiditushe
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascriptjay li
 
[圣思园][Java SE]Reflection
[圣思园][Java SE]Reflection[圣思园][Java SE]Reflection
[圣思园][Java SE]ReflectionArBing Xie
 
6, access control
6, access control6, access control
6, access controlted-xu
 
Python面向对象开发基础篇
Python面向对象开发基础篇Python面向对象开发基础篇
Python面向对象开发基础篇modou li
 
[圣思园][Java SE]Java se lesson 3
[圣思园][Java SE]Java se lesson 3[圣思园][Java SE]Java se lesson 3
[圣思园][Java SE]Java se lesson 3ArBing Xie
 
Abap oo
Abap ooAbap oo
Abap oovernoo
 
11, exceptions
11, exceptions11, exceptions
11, exceptionsted-xu
 
3. java basics
3. java basics3. java basics
3. java basicsnetdbncku
 
Java类加载器
Java类加载器Java类加载器
Java类加载器Fu Cheng
 

Ähnlich wie 7, reusing classes (20)

Class Inheritance
Class InheritanceClass Inheritance
Class Inheritance
 
Java面试32题
Java面试32题Java面试32题
Java面试32题
 
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanup
 
10, inner classes
10, inner classes10, inner classes
10, inner classes
 
Sun java
Sun javaSun java
Sun java
 
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
 
Java面试知识
Java面试知识Java面试知识
Java面试知识
 
Java基础方面
Java基础方面Java基础方面
Java基础方面
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
 
[圣思园][Java SE]Reflection
[圣思园][Java SE]Reflection[圣思园][Java SE]Reflection
[圣思园][Java SE]Reflection
 
6, access control
6, access control6, access control
6, access control
 
Python面向对象开发基础篇
Python面向对象开发基础篇Python面向对象开发基础篇
Python面向对象开发基础篇
 
[圣思园][Java SE]Java se lesson 3
[圣思园][Java SE]Java se lesson 3[圣思园][Java SE]Java se lesson 3
[圣思园][Java SE]Java se lesson 3
 
SCJP ch12
SCJP ch12SCJP ch12
SCJP ch12
 
SCJP ch11
SCJP ch11SCJP ch11
SCJP ch11
 
Abap oo
Abap ooAbap oo
Abap oo
 
SCJP ch09
SCJP ch09SCJP ch09
SCJP ch09
 
11, exceptions
11, exceptions11, exceptions
11, exceptions
 
3. java basics
3. java basics3. java basics
3. java basics
 
Java类加载器
Java类加载器Java类加载器
Java类加载器
 

Mehr von ted-xu

11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert systemted-xu
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashbackted-xu
 
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rmanted-xu
 
8, OCP - backup with rman
8, OCP - backup with rman8, OCP - backup with rman
8, OCP - backup with rmanted-xu
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recoveryted-xu
 
6, OCP - oracle security
6, OCP - oracle security6, OCP - oracle security
6, OCP - oracle securityted-xu
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storageted-xu
 
4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networkingted-xu
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance managementted-xu
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a databaseted-xu
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture introted-xu
 
12, OCP - performance tuning
12, OCP - performance tuning12, OCP - performance tuning
12, OCP - performance tuningted-xu
 
7, business event system
7, business event system7, business event system
7, business event systemted-xu
 
6, workflow miscellaneous
6, workflow miscellaneous6, workflow miscellaneous
6, workflow miscellaneousted-xu
 
5, workflow function activity
5, workflow function activity5, workflow function activity
5, workflow function activityted-xu
 
4, workflow tables & api
4, workflow tables & api4, workflow tables & api
4, workflow tables & apited-xu
 
3, workflow in ebs
3, workflow in ebs3, workflow in ebs
3, workflow in ebsted-xu
 
2, a simple workflow
2, a simple workflow2, a simple workflow
2, a simple workflowted-xu
 
1, workflow intro
1, workflow intro1, workflow intro
1, workflow introted-xu
 
8, bes tables & api
8, bes tables & api8, bes tables & api
8, bes tables & apited-xu
 

Mehr von ted-xu (20)

11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert system
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashback
 
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman
 
8, OCP - backup with rman
8, OCP - backup with rman8, OCP - backup with rman
8, OCP - backup with rman
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery
 
6, OCP - oracle security
6, OCP - oracle security6, OCP - oracle security
6, OCP - oracle security
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storage
 
4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networking
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance management
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a database
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture intro
 
12, OCP - performance tuning
12, OCP - performance tuning12, OCP - performance tuning
12, OCP - performance tuning
 
7, business event system
7, business event system7, business event system
7, business event system
 
6, workflow miscellaneous
6, workflow miscellaneous6, workflow miscellaneous
6, workflow miscellaneous
 
5, workflow function activity
5, workflow function activity5, workflow function activity
5, workflow function activity
 
4, workflow tables & api
4, workflow tables & api4, workflow tables & api
4, workflow tables & api
 
3, workflow in ebs
3, workflow in ebs3, workflow in ebs
3, workflow in ebs
 
2, a simple workflow
2, a simple workflow2, a simple workflow
2, a simple workflow
 
1, workflow intro
1, workflow intro1, workflow intro
1, workflow intro
 
8, bes tables & api
8, bes tables & api8, bes tables & api
8, bes tables & api
 

7, reusing classes

  • 2. Agenda • 概述 • 组合 • 继承 • 子类初始化 • super关键字 • 委托 • @Override注解 • 继承 vs. 组合 • protected • 向上转型 • final关键字
  • 3. 概述 • 不要重复自己(Don’t Repeat Yourself/DRY)是 编码的一个基本原则. 重复会带来极严重的 代码可维护性问题. • Java通过继承或者组合的方式实现对已有类 功能的重用;
  • 4. 组合 • 组合是指在一个java类中引用另一个类的对象, 访问 该类的成员及方法从而达到重用的目的. 比如: 一个 喷水系统需要有水源装置, 这里创建2个类 SprinklerSystem/WaterSource, 其中SprinklerSystem将 会重用WaterSource类, 示例: class WaterSource {......} class SprinklerSystem{ WaterSource source; // 通过组合进行重用 ...... } • 示例: demo/Demo1.java
  • 5. 继承 • 当创建一个自定义的class时就会发生继承: 1), 显式使用extends关键字继承某个类; 2), 如果没有显式继承, 新建的类会自动继承Object基类. • 通过继承, 父类的方法可以在子类调用, 从而达到重用的目的; 比如: class Parent { void f1(); void f2(); } class Child extends Parent {...} // 调用父类的方法 Child c = new Child(); c.f1(); c.f2(); • 示例: demo/Demo2.java
  • 6. 子类初始化 • 通过继承得到的子类是如何进行初始化的 呢? 在进行子类的初始化之前, 需要先逐级 对基类进行初始化(Java中可以显式调用基类的构造器进行 初始化, 如果不指定则调用基类的默认构造器),基类初始化完 毕之后会产生一个基类子对象, 该子对象将 会被之后创建的子类对象引用. 接下则会开 始子类的初始化工作; • 示例: demo/Demo3.java
  • 7. 子类初始化 • 参考: Class A Note: 以创建一个C类对象为例 C c = new C(); 2 extends 3 需要按如下顺序执行: Class B 1, 先需要对C的基类B进行初始化; 2, B还有基类A, 先进行基类A的初始化; 3, A初始化完毕, 执行B的初始化; 1 extends 4 4, B初始化完毕, 执行C的初始化 Class C
  • 8. super关键字 • 默认情况下初始化子类时会调用父类的默 认构造器, 可以在子类的构造器中通过super 调用指定的父类构造器, 比如: Class A { A() {...} A(int i) {...} } Class B { B(int i) {super(i); ...} // 调用基类的A(int)构造器 } • 示例: demo/Demo4.java
  • 9. 委托 Delegation • 委托是介于继承和组合之间的重用方式, 通过保存某个 类对象的引用(组合), 并且提供与该类相同的接口(继承), 示例: Class A { void f1(int i) {...} String f2() {...} } Class B { A a = new A(); // 保存A对象的引用 void f1(int i) {a.f1(i);} // 一致的接口, 并调用A的方法 String f2() {return a.f2();} } • 示例: demo/Demo5.java
  • 10. @Override注解 • @Override注解用于表示子类覆盖了基类中的某个方法, 如果实际没有发生覆盖, 那么会产生编译错误, 示例: class A { void f1() {...} void f2(int i) {...} } class B extends A { @Override void f1() {...} // @Override void f2(String s) {...} // 编译错误, 重载而非覆盖 }
  • 11. 继承 vs. 组合 • 如何在继承与组合之间做出选择? 取决于是 否需要提供与被重用类相同的接口, 如果需 要则使用继承, 否则使用组合; 另外继承表 达的是一种is-a的关系, 因此需要额外从类本 身的建模意义上进行考虑. • demo/Demo6.java
  • 12. protected • 类的受保护成员允许当前类, 子类, 以及同一 个包下面的其他类访问(package access); • 尽管java提供了受保护访问权限, 但是仍建 议优先使用private权限; • 示例: demo/Demo7.java
  • 13. 向上转型 Upcasting • 向上转型是指将对象赋值给指向其父类的引用, 比如Class B extends A {...}, 可以编写如下代码: A obj = new B(); // 这里创建B对象, 赋值给指向A的引用 • 向上转型始终是安全的, 继承本身表示的就是一种is-a关 系; • 在调用方法时经常会发生向上转型; 示例: 方法声明: void f(java.util.List list); 方法调用: java.util.List list = new ArrayList(); ... f(list); // Upcasting, 由ArrayList到List
  • 14. final关键字 • final关键字在不同的使用场合下会有不同的 意义, 大体上用来声明某个类/成员是不可改 变的; • final类: 表示该类不能被继承; • final方法: 表示该方法不能被子类覆盖; • final属性: 表示该属性不能被修改; • final参数: 该参数在方法里面不能被修改;
  • 15. final类 • 出于设计的原因, 某个不应该被继承, 可以将 它声明为final; 这通常见于某些工具类. • 示例: final Class A {......} class B extends A {...} // 编译错误
  • 16. final方法 • 出于两个原因, 可以将方法声明为final: 1), 该方法不应该在子类中被覆盖; 2), 效率; 将方法声明为final, 可以在一定程度上提高效 率. • 示例: class A{ public final void f()... } class B extends A { public void f()... // 编译错误, final方法不能被覆盖 } • 示例: demo/Demo8.java
  • 17. Pitfall: private method • private方法默认是final的, 不能在子类中覆盖一 个private方法; 如果你在子类重写了一个private 方法, java编译器不会对此提出警告. • 示例: class A { private void f() ... // 默认为final } class B extends A { public void f() ... // 不是覆盖 }
  • 18. final方法参数 • 当使用final修饰方法的形参时, 该参数在方法调用过 程中不能被重新赋值: 1), 如果该参数是原语类型, 那么该参数不能被重新赋 值, eg: void f(final int i)... 在方法体内, 不能使用 i = ...重新赋值 2), 如果该参数是某个引用类型, 则表示该引用不能指 向其他的对象, eg: void f(final List list)... 不能使用list = ...进行赋值, 但是可以对象本身的内容可 以改变, 比如在方法内调用list.add(...) • 示例: demo/Demo9.java
  • 19. final属性 • 将属性声明为final, 1), 如果属性在声明时进行了初始化, 那么该属 性不能被重新赋值; eg: final int i = 0; // i 不能被重新赋值 2), 如果声明时没有初始化(Blank final), 那么必 须在构造器中对该属性进行初始化; eg: class A { final int i; A() { i = 3; } } • final经常与static结合使用用于声明常量(Constants), eg: public static final int VALUE_ONE = 1; • 示例: demo/Demo10.java
  • 20. END