Java接口内部类和包.ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BigOuter. Nested n=new BigOuter. Nested (); n.go();
A.14
内部类特性
内部类的类特性
内部类不能与外部类同名。 内部类具有封装性。 内部类具有继承性。 内部类具有抽象性。 内部类能访问外部类成员。
内部类的成员特性
使用点运算符“.”引用内部类。例如: MyOuter.MyInner 内部类具有静态特性。
A.15
• 使用嵌套类来反映并实施两个类之间的关系。 当嵌套类只在包含它的类中有意义时,或者它 依赖于包含它的类来实现功能时,应该在另一 个类中定义这个类。
• 关于内部类的争论:
• 正方:在非常特定的情形下具有某些功能强大的、
A.9
内部类(Inner Classes)
内部类允许在一个类中定义另一个类,即能够 使一个类成为另一个类的成员。
按照如何定义以及在哪里定义内部类,内部类 分为几种形式:
一般内部类 局部方法内部类 匿名内部类 静态嵌套类
内部类的主要优点之一:内部类的实例与外部 类的实例共享一种“特殊关系”——内部类中的 代码可以访问外部类的所有成员(甚至是那些 标识为private的成员)
A.11
局部方法内部类 (Method-Local Inner Classes)
局部方法内部类在外部类的方法内定义 为了使用内部类,必须实例化它,该实 例必须发生在同一个方法内,但位于该类 的定义代码之后 局部方法内部类不能使用该方法内的局 部变量,final变量除外。 能够应用于局部方法内部类的修饰符只 有abstract和final(两者不能同时使用)
public static void main(String args[ ]){ B b=new B( ); b.show( );
} }
class B impl必em须e为ntpsubAlic{ int g;
public void show( ) { System.out.println(“g=“+g);
A.13
静态嵌套类 (Static Nested Classes)
Class BigOuter{ /*外部类的静态成员, Nested在BigOuter的作 用域内,只能访问外部类的静态成员。*/
static class Nested{ System.out.println(“hi”);}
} 访问方法:
计算面积
perimeter() 计算周长
继承 SolidGraphics1 立体图形接口 volume() 计算体积
实现
Globe2 ห้องสมุดไป่ตู้类 覆盖area()方法,计算球的表面积 覆盖perimeter()方法,返回0 覆盖volume()方法,计算球的体积
A.8
接口与抽象类的区别
相同点:
两者都可以包含抽象方法。 两者都不能被实例化。 两者都是引用数据类型。
} }
A.5
接口的特点
接口及接口中成员的访问权限都是public 接口中的成员方法都是public、abstract的实例 成员方法 接口中的所有abstract方法必须全部被实现接口 的具体类实现 接口中的成员变量都是常量 接口不能被实例化 接口是引用数据类型
A g1 = new B();
A.6
A.10
常规内部类 (Regular Inner Classes )
例:MyOuter.java 定义
实例化内部类
在外部类中实例化内部类 从外部类之外创建内部类对象
如果希望创建内部类的一个实例,则必 须有外部类的一个实例。
内部类的实例总是拥有一个外部类的隐 含引用。编译器将负责处理这种隐含关 系。
用接口实现多重继承
一个类可以继承一个父类并实现多个接口
父类
继承
继承
子类1
子类2
(1) 单重继承
父类
接口1
接口2
继承 实现 实现
子类
(a) 继承并实现接口
(2) 多重继承
接口1
接口2
实现 实现
类
(b) 实现多个接口
A.7
接口的继承
图4.5 接口的继承
PlaneGraphics2 平面图形接口
area()
class demo implements MyInterface {
public void add(int x, int y){} public void volume(int x,int y, int z){} }
A.4
接口使用示例
interface A { void show( ); }
class InterfaceTest {
不同点:
抽象类约定多个子类之间共同使用的方法;接口约定多个互不相关类之 间共同使用的方法。 抽象类与子类之间采用单重继承机制;一个类实现多个接口则实现了多 重继承的功能。 抽象类及其类中成员具有与普通类一样的访问权限;接口的访问权限有 public和默认两种,接口中成员的访问权限均是public。 抽象类中可以包含非抽象方法,也可以声明构造方法;接口中的方法全 部是抽象方法,不能声明构造方法。 抽象类中可以声明成员变量,子类可以对该成员变量赋值;接口中只能 声明常量。
接口、内部类和包
接口(Interface)
• 一个类一次只能继承一个类但可以实现 若干个接口。
• 接口只说明应该做什么但不指定如何做。 • 当实现接口时,表明你同意遵守定义在
该接口中的契约并履行该契约。 • 通过正确地、具体地重写接口定义的所
有方法,就可以实现一个接口。
A.2
声明接口
[public] interface MyInterface { [public static final] int A=100;
[public abstract] void add(int x, int y); [public abstract] void volume(int x,int y, int
z); }
A.3
• 编译如下:
javac MyInterface.java
• 用关键字 implements 实现接口,例如:
A.12
匿名内部类 (Anonymous Inner Classes)
形式一:Food.java 形式二:Cookable.java 形式三:方法的参数列表中声明的匿名 内部类MyClass.java 特点:
无名称,子类或实现器 作为一条语句的一部分,“ };” 参数列表中声明的匿名内部类:“})”
A.14
内部类特性
内部类的类特性
内部类不能与外部类同名。 内部类具有封装性。 内部类具有继承性。 内部类具有抽象性。 内部类能访问外部类成员。
内部类的成员特性
使用点运算符“.”引用内部类。例如: MyOuter.MyInner 内部类具有静态特性。
A.15
• 使用嵌套类来反映并实施两个类之间的关系。 当嵌套类只在包含它的类中有意义时,或者它 依赖于包含它的类来实现功能时,应该在另一 个类中定义这个类。
• 关于内部类的争论:
• 正方:在非常特定的情形下具有某些功能强大的、
A.9
内部类(Inner Classes)
内部类允许在一个类中定义另一个类,即能够 使一个类成为另一个类的成员。
按照如何定义以及在哪里定义内部类,内部类 分为几种形式:
一般内部类 局部方法内部类 匿名内部类 静态嵌套类
内部类的主要优点之一:内部类的实例与外部 类的实例共享一种“特殊关系”——内部类中的 代码可以访问外部类的所有成员(甚至是那些 标识为private的成员)
A.11
局部方法内部类 (Method-Local Inner Classes)
局部方法内部类在外部类的方法内定义 为了使用内部类,必须实例化它,该实 例必须发生在同一个方法内,但位于该类 的定义代码之后 局部方法内部类不能使用该方法内的局 部变量,final变量除外。 能够应用于局部方法内部类的修饰符只 有abstract和final(两者不能同时使用)
public static void main(String args[ ]){ B b=new B( ); b.show( );
} }
class B impl必em须e为ntpsubAlic{ int g;
public void show( ) { System.out.println(“g=“+g);
A.13
静态嵌套类 (Static Nested Classes)
Class BigOuter{ /*外部类的静态成员, Nested在BigOuter的作 用域内,只能访问外部类的静态成员。*/
static class Nested{ System.out.println(“hi”);}
} 访问方法:
计算面积
perimeter() 计算周长
继承 SolidGraphics1 立体图形接口 volume() 计算体积
实现
Globe2 ห้องสมุดไป่ตู้类 覆盖area()方法,计算球的表面积 覆盖perimeter()方法,返回0 覆盖volume()方法,计算球的体积
A.8
接口与抽象类的区别
相同点:
两者都可以包含抽象方法。 两者都不能被实例化。 两者都是引用数据类型。
} }
A.5
接口的特点
接口及接口中成员的访问权限都是public 接口中的成员方法都是public、abstract的实例 成员方法 接口中的所有abstract方法必须全部被实现接口 的具体类实现 接口中的成员变量都是常量 接口不能被实例化 接口是引用数据类型
A g1 = new B();
A.6
A.10
常规内部类 (Regular Inner Classes )
例:MyOuter.java 定义
实例化内部类
在外部类中实例化内部类 从外部类之外创建内部类对象
如果希望创建内部类的一个实例,则必 须有外部类的一个实例。
内部类的实例总是拥有一个外部类的隐 含引用。编译器将负责处理这种隐含关 系。
用接口实现多重继承
一个类可以继承一个父类并实现多个接口
父类
继承
继承
子类1
子类2
(1) 单重继承
父类
接口1
接口2
继承 实现 实现
子类
(a) 继承并实现接口
(2) 多重继承
接口1
接口2
实现 实现
类
(b) 实现多个接口
A.7
接口的继承
图4.5 接口的继承
PlaneGraphics2 平面图形接口
area()
class demo implements MyInterface {
public void add(int x, int y){} public void volume(int x,int y, int z){} }
A.4
接口使用示例
interface A { void show( ); }
class InterfaceTest {
不同点:
抽象类约定多个子类之间共同使用的方法;接口约定多个互不相关类之 间共同使用的方法。 抽象类与子类之间采用单重继承机制;一个类实现多个接口则实现了多 重继承的功能。 抽象类及其类中成员具有与普通类一样的访问权限;接口的访问权限有 public和默认两种,接口中成员的访问权限均是public。 抽象类中可以包含非抽象方法,也可以声明构造方法;接口中的方法全 部是抽象方法,不能声明构造方法。 抽象类中可以声明成员变量,子类可以对该成员变量赋值;接口中只能 声明常量。
接口、内部类和包
接口(Interface)
• 一个类一次只能继承一个类但可以实现 若干个接口。
• 接口只说明应该做什么但不指定如何做。 • 当实现接口时,表明你同意遵守定义在
该接口中的契约并履行该契约。 • 通过正确地、具体地重写接口定义的所
有方法,就可以实现一个接口。
A.2
声明接口
[public] interface MyInterface { [public static final] int A=100;
[public abstract] void add(int x, int y); [public abstract] void volume(int x,int y, int
z); }
A.3
• 编译如下:
javac MyInterface.java
• 用关键字 implements 实现接口,例如:
A.12
匿名内部类 (Anonymous Inner Classes)
形式一:Food.java 形式二:Cookable.java 形式三:方法的参数列表中声明的匿名 内部类MyClass.java 特点:
无名称,子类或实现器 作为一条语句的一部分,“ };” 参数列表中声明的匿名内部类:“})”