SlideShare a Scribd company logo
Interfaces &
Abstract Classes
Agenda
•   概述
•   接口
•   接口实现
•   接口 - 多重继承
•   接口 - 命名冲突
•   接口 - 属性
•   接口与工厂方法
•   抽象类和方法
概述
• 接口(interface) 和 抽象类(abstract class)提供
  了一种比实现类更为有效的方式, 用于实现
  接口与实现的分离;
• 接口 相比 抽象类, 是一种更高层次的抽象,
  它声明了一种规范, 所有基于该接口的实现
  类都必须实现该规范;
• 本章将从接口介绍, 然后介绍抽象类.
接口
• 使用interface关键字声明一个接口, 在接口中可
  以定义static final属性和声明方法, 接口中没有
  任何方法的实现; 示例:
public interface InterfaceA {
  public static final int VALUE_ONE = 1;
  public void doSomething();
}
• 不管是否作了声明, 接口中的属性默认是static
  final, 方法默认是public;
• 接口本身的访问权限可以是public的, 也可以是
  包访问权限;
• 示例: demo/Demo1.java
接口实现
• 使用implements关键字来实现一个接口, 如下:
                        interface A
                        void f1();
                        void f2();

           implements                  implements


       class ClassA                   class ClassB
       void f1()...                   void f1()...
       void f2()...                   void f2()...


• 接口中所有的方法默认都是public的, 即使不声
  明为public; 子类在实现接口中声明的方法时,
  必须将方法声明为public, 否则无法编译通过;
• 示例: demo/Demo2.java
接口 – 多重继承
• 与C++不同的是, Java语言不支持同时继承多
  个类; 但是java提供了接口, 一个类可以同时
  实现多个接口;
• 示例: demo/Demo3.java
接口继承
• 在创建新的接口时, 可以继承自一个或者多
  个接口, 新的接口将继承这些接口中所有的
  方法声明; 比如:
interface A {...}
interface B extends A {...}
interface C extends A, B {...}
• 示例: demo/Demo4.java
接口 – 命名冲突
• 在同时实现多个接口时, 需要注意方法名称
  冲突的问题; 比如:
interface I1 { void f(); }
interface I2 { int f(); }
class C implements I1, I2 {...} // compile error
• 在上面的例子中I1 和 I2接口均声明了方法f,
  两者只是返回值不同;
• 示例: demo/Demo5.java
接口 – 属性
• 可以在接口中声明属性, 接口中所有的属性无
   论声明与否都是public static final的; 示例:
// 在JDK5引入enum类型之前, 通常使用只包含属性声明的接口来达到类似效果
public interface Months {
int JANUARY = 1, FEBRUARY = 2,
     MARCH = 3, APRIL = 4, MAY = 5 ......
• 接口属性必须在声明时进行赋值, 赋值可以使
  非常量表达式, 示例:
public interface RandVals {
   Random RAND = new Random(47);
   int RANDOM_INT = RAND.nextInt(10);
   long RANDOM_LONG = RAND.nextLong() * 10; ...
• 示例: demo/Demo6.java
接口与工厂方法
• 工厂方法(Factory Method)设计模式提供了除构
  造器之外的另一种方式用于创建对象, 示例:
class SomeObject {...}
class SomeObjectFactory {
    SomeObject createObject() {...}
}
其中createObject方法被称为工厂方法, 工厂方
法本身会调用constructor创建对象;
• 接口与工厂方法: 工厂方法可以声明为返回某
  个接口, 并根据不同的情况返回具体的实现类.
  这样客户代码就可以与具体的实现完全解耦合.
• 示例: demo/Demo7.java
抽象类 和 方法
• 抽象类是一种介于接口和实现类之间的抽象层
  次, 抽象类可以包含抽象方法 和 具体方法;
• 使用abstract class声明一个抽象类, 在方法声明
  前加abstract用于声明一个抽象方法. 示例:
public abstract AbstractClass {
  void concreteMethod() {...}
  abstract void abstractMethod();
}
• 示例: demo/Demo8.java

More Related Content

PPTX
8, polymorphism
PPTX
7, reusing classes
PPT
презентация электрод
PPTX
3, operators
PPTX
PPTX
Redes sociales
PDF
Isla workshop 2015-03-08
PDF
Agribusiness courses and ag training victoria
8, polymorphism
7, reusing classes
презентация электрод
3, operators
Redes sociales
Isla workshop 2015-03-08
Agribusiness courses and ag training victoria

Viewers also liked (9)

PPS
Lynette Community Of Learners
PPTX
визитница 0
PPT
гиа 9 - для школьного сайта
DOCX
гиа 9 - график проведения
PPSX
Sobre el concepto 'Posverdad'
PPTX
Using Social Media in Business - iWIN Forum - Scot McKee
PPTX
Effective communication skill IN NURSING
PPT
Nursing Communication
PDF
Prf box
Lynette Community Of Learners
визитница 0
гиа 9 - для школьного сайта
гиа 9 - график проведения
Sobre el concepto 'Posverdad'
Using Social Media in Business - iWIN Forum - Scot McKee
Effective communication skill IN NURSING
Nursing Communication
Prf box
Ad

Similar to 9, interfaces (20)

PDF
3. java basics
PPTX
2, object oriented programming
PDF
使用Lua提高开发效率
DOC
Java基础方面
DOC
Java面试32题
PDF
Clojure简介与应用
PPT
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
PDF
給 iOS 工程師的 Flutter 開發
DOC
Java面试知识
PDF
PDF
PDF
PDF
PDF
PDF
2. java introduction
PPT
beidakejian
PPTX
lua & ngx_lua 的介绍与应用
PPT
第9章 Shell 編程
3. java basics
2, object oriented programming
使用Lua提高开发效率
Java基础方面
Java面试32题
Clojure简介与应用
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
給 iOS 工程師的 Flutter 開發
Java面试知识
2. java introduction
beidakejian
lua & ngx_lua 的介绍与应用
第9章 Shell 編程
Ad

More from ted-xu (20)

PPTX
11, OCP - awr & alert system
PPTX
10, OCP - flashback
PPTX
9, OCP - restore and recovery with rman
PPTX
8, OCP - backup with rman
PPTX
7, OCP - configure database for backup and recovery
PPTX
6, OCP - oracle security
PPTX
5, OCP - oracle storage
PPTX
4, OCP - oracle networking
PPTX
3, OCP - instance management
PPTX
2, OCP - installing and creating a database
PPTX
1, OCP - architecture intro
PPTX
12, OCP - performance tuning
PPTX
7, business event system
PPTX
6, workflow miscellaneous
PPTX
5, workflow function activity
PPTX
4, workflow tables & api
PPTX
3, workflow in ebs
PPTX
2, a simple workflow
PPTX
1, workflow intro
PPTX
8, bes tables & api
11, OCP - awr & alert system
10, OCP - flashback
9, OCP - restore and recovery with rman
8, OCP - backup with rman
7, OCP - configure database for backup and recovery
6, OCP - oracle security
5, OCP - oracle storage
4, OCP - oracle networking
3, OCP - instance management
2, OCP - installing and creating a database
1, OCP - architecture intro
12, OCP - performance tuning
7, business event system
6, workflow miscellaneous
5, workflow function activity
4, workflow tables & api
3, workflow in ebs
2, a simple workflow
1, workflow intro
8, bes tables & api

9, interfaces

  • 2. Agenda • 概述 • 接口 • 接口实现 • 接口 - 多重继承 • 接口 - 命名冲突 • 接口 - 属性 • 接口与工厂方法 • 抽象类和方法
  • 3. 概述 • 接口(interface) 和 抽象类(abstract class)提供 了一种比实现类更为有效的方式, 用于实现 接口与实现的分离; • 接口 相比 抽象类, 是一种更高层次的抽象, 它声明了一种规范, 所有基于该接口的实现 类都必须实现该规范; • 本章将从接口介绍, 然后介绍抽象类.
  • 4. 接口 • 使用interface关键字声明一个接口, 在接口中可 以定义static final属性和声明方法, 接口中没有 任何方法的实现; 示例: public interface InterfaceA { public static final int VALUE_ONE = 1; public void doSomething(); } • 不管是否作了声明, 接口中的属性默认是static final, 方法默认是public; • 接口本身的访问权限可以是public的, 也可以是 包访问权限; • 示例: demo/Demo1.java
  • 5. 接口实现 • 使用implements关键字来实现一个接口, 如下: interface A void f1(); void f2(); implements implements class ClassA class ClassB void f1()... void f1()... void f2()... void f2()... • 接口中所有的方法默认都是public的, 即使不声 明为public; 子类在实现接口中声明的方法时, 必须将方法声明为public, 否则无法编译通过; • 示例: demo/Demo2.java
  • 6. 接口 – 多重继承 • 与C++不同的是, Java语言不支持同时继承多 个类; 但是java提供了接口, 一个类可以同时 实现多个接口; • 示例: demo/Demo3.java
  • 7. 接口继承 • 在创建新的接口时, 可以继承自一个或者多 个接口, 新的接口将继承这些接口中所有的 方法声明; 比如: interface A {...} interface B extends A {...} interface C extends A, B {...} • 示例: demo/Demo4.java
  • 8. 接口 – 命名冲突 • 在同时实现多个接口时, 需要注意方法名称 冲突的问题; 比如: interface I1 { void f(); } interface I2 { int f(); } class C implements I1, I2 {...} // compile error • 在上面的例子中I1 和 I2接口均声明了方法f, 两者只是返回值不同; • 示例: demo/Demo5.java
  • 9. 接口 – 属性 • 可以在接口中声明属性, 接口中所有的属性无 论声明与否都是public static final的; 示例: // 在JDK5引入enum类型之前, 通常使用只包含属性声明的接口来达到类似效果 public interface Months { int JANUARY = 1, FEBRUARY = 2, MARCH = 3, APRIL = 4, MAY = 5 ...... • 接口属性必须在声明时进行赋值, 赋值可以使 非常量表达式, 示例: public interface RandVals { Random RAND = new Random(47); int RANDOM_INT = RAND.nextInt(10); long RANDOM_LONG = RAND.nextLong() * 10; ... • 示例: demo/Demo6.java
  • 10. 接口与工厂方法 • 工厂方法(Factory Method)设计模式提供了除构 造器之外的另一种方式用于创建对象, 示例: class SomeObject {...} class SomeObjectFactory { SomeObject createObject() {...} } 其中createObject方法被称为工厂方法, 工厂方 法本身会调用constructor创建对象; • 接口与工厂方法: 工厂方法可以声明为返回某 个接口, 并根据不同的情况返回具体的实现类. 这样客户代码就可以与具体的实现完全解耦合. • 示例: demo/Demo7.java
  • 11. 抽象类 和 方法 • 抽象类是一种介于接口和实现类之间的抽象层 次, 抽象类可以包含抽象方法 和 具体方法; • 使用abstract class声明一个抽象类, 在方法声明 前加abstract用于声明一个抽象方法. 示例: public abstract AbstractClass { void concreteMethod() {...} abstract void abstractMethod(); } • 示例: demo/Demo8.java