05_第5章 抽象类、接口和内部类

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

掌握接口的定义及使用
了解内部类的使用
-2-
抽象类-1
• 抽象类
抽象类和接口两种机制 的引入,使Java拥有了 强大的面向对象编程能 力。
在面向对象的概念中,所有的对象都是通过类来表述,但并不是所有的 类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一 类具体的对象,这样的类就是抽象类。 抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是 对一系列看上去不同,但是本质上相同的具体概念的抽象。
final 型,且必须给其初值,所 以实现类中不能重新定义,也不能改变其值;
接口中的方法默认都是public abstract类型的。
- 10 -
instanceof运算符
• Instanceof
声明为同种类型的两个引用变量调用同一个方法时也可能会有不同的行 为。为更准确的鉴别一个对象的真正类型,Java语言引入了instanceof操 作符,其使用格式如下:
接口是对抽象类的进一步抽象,是方法声明和常量的定义集合;
接口是一种行为规范,是一种“契约”;
• 具体格式如下所示:
<访问符> interface 接口名 { [访问符] <返回类型> 方法名([参数列表]); ...... }
-7-
接口-2
• 接口实例
同抽象类一样,接口是 一种更加“虚拟”的类 结构,无法对接口实例 化。
注意:抽象类不能实例化,但可以指向一个实现它的子类对象;
abstract不能与final同时修饰一个类; abstract不能和static、private、final或native并列修饰同一方法。
-6-
接口-1

抽象类表示的是一种继 承关系,一个类只能使 用一次继承关系,这样 接口概述 限制了类的多重体现 。 如何解决这个问题呢? Java是单继承的语言,利用接口可以模拟多继承;
定义一个接口MultiInterfaБайду номын сангаасe.java来演示接口中常量的定义 。
public interface MultiInterface { public static final double PI = 3.1415926; public void callArea(); }
接口中的变量一定是 public static final 的, 接口中的方法一定是 注意:在定义接口的时候,接口中的所有方法和常量自动定义为public; public abstract 的 接口中定义的变量默认是public static final 型,且必须赋初值 。
• 静态内部类
当内部类只是为了将其隐藏起来,不需要内部类对象与其外部类的对象之间 静态内部类可以用 有联系时,可以将内部类声明为static,称为静态内部类。 public,protected,private修 饰,不能访问外部类 的非静态成员。
- 14 -
内部类-3
• 匿名内部类
将局部内部类特殊化— —如果只创建一个类的一个对象,可以考虑匿名内部 类,在GUI事件处理中大量用到。匿名内部类就是没有名字的内部类。如: JButton button = new JButton("button"); button.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ System.out.println("Button Clicked"); } } ); 创建一个实现 ActionListener接口类的新 对象,需要实现的方法 actionPerformed定义在 new操作紧跟的大括号内。
•抽象类需要注意以下几点:
abstract放在class前,指明该类是抽象类; abstract放在方法声明中,则该方法是抽象方法,抽象方法没有方法
体; 一个抽象类可以含有多个抽象方法,也可以含有已实现的方法。
-3-
抽象类-2
• 抽象类实例
定义一个类Shape来演示抽象类的定义和使用。
public abstract class Shape { double dim; public Shape(double dim) { this.dim = dim; 未实现的方 法 } // 抽象方法,获得面积 public abstract double callArea(); // 抽象方法,获得周长 public abstract double callPerimeter(); }
-4-
抽象类-3
public class Circle extends Shape { • 抽象类的使用实例 public Circle(double dim) { 定义Shape类一个的子类Circle来演示抽象类的使用。 super(dim); } // 实现抽象方法callArea() public double callArea() { // 返回圆的面积 return 3.14 * dim * dim; } 执行结果如下: // 实现抽象方法callPerimeter() 圆的面积 : 314.0 public double callPerimeter() { // 返回圆的周长 圆的周长 : 62.800000000000004 return 2 * 3.14 * dim; } public static void main(String[] args) { // 声明一个Shape对象,指向实现它的子类对象 Shape shape = new Circle(10); // 调用callArea()求圆的面积,并输出 System.out.println("圆的面积是:" + shape.callArea() ); // 调用callPerimeter()求圆的周长,并输出 System.out.println("圆的周长是:" + shape.callPerimeter() ); } } -5-
-8-
接口-3
• 接口的使用
接口的使用通过“implements”关键字来实现,示例代码如下 :
public class MyClass implements MyInterface { public void add(int x, int y) { // do something } public void volume(int x, int y, int z) { // do something } }
第5章抽象类接口和内部类2掌握抽象类的定义及使用掌握接口的定义及使用了解内部类的使用目标3抽象类1?抽象类在面向对象的概念中所有的对象都是通过类来表述但并不是所有的类都是用来描绘对象的如果一个类中没有包含足够的信息来描绘一类具体的对象这样的类就是抽象类
第 5 章
抽象类、接口和内部类
目标
掌握抽象类的定义及使用
• 多重继承
通过实现多个接口来实现多重继承,示例代码如下 :
public class MyClass2 implements MyInterface, MultiInterface{ ......//实现多个接口中的所有方法 }
-9-
抽象类与接口
• 抽象类与接口的区别
抽象类中可以有非抽象方法。接口中则不能有实现方法; 接口中定义的变量默认是public static

//创建一个Teacher对象,把引用赋予Person类型的变量p,该过程自动转换 Person p = new Teacher(); //把变量p强制转换成Teacher类型的变量 Teacher t = (Teacher)p;
- 12 -
内部类-1
• 内部类
Java内部类主要有成员内 部类、局部内部类、静态 内部类、匿名内部类四种。
抽象类-4
• 抽象类的特点
这是错误的! 抽象类虽然具备类的形式,但由于其“抽象”性,不能定义抽象类的 抽象类不能实例 实例,即不能为抽象类分配具体空间 ; 化。
Shape circle= new Shape(3);
• 可以通过如下方式来实例一个抽象类
Shape someShape; //引用Circle类的实例对象 someShape = new Circle(5); someShape.callArea();
- 15 -
内部类-4
• 适合使用匿名内部类的情况:
只用到类的一个实例,后面不会再用到这个类了; 类在定义后马上用到; 类非常小。
• 使用匿名内部类需遵循的原则:

匿名内部类不能有构造方法; 匿名内部类不能定义任何静态成员; 只能创建匿名内部类的一个实例; 一个匿名内部类一定跟在new的后面,创建其实现的接口或父类的对象。
• 成员内部类
成员内部类的定义结构很简单,就是在“外部类”的内部定义一个类。
• 局部内部类
在方法中定义的内部类称为局部内部类。与局部变量类似,局部内部类不 能用public或private访问修饰符进行声明。它的作用域被限定在声明该类得方 法块中。局部内部类的优势在于,它可以对外界完全隐藏起来,除了所在的 方法之外,对其他方法而言是透明的。
内部类是指在一个类的内部再定义一个类。内部类作为外部类的一 个成员,并且依附于外部类而存在的。引入内部类的主要原因是 :
内部类能够隐藏起来,不为同一包的其他类访问; 内部类可以访问其所处外部类的所有属性;
在回调方法处理中,匿名内部类尤为便捷,特别是GUI中的事件
处理
- 13 -
内部类-2
<引用类型变量> instanceof <引用类型>
当 instanceof 左侧的引用类型变量所引用对象的实际类型是其右侧给 出的类型或其子类类型时,整个表达式的结果为true,否则为false。
- 11 -
对象类型转换
• 引用数据类型转换
引用类型数据转换时,同样可以分为自动转换和强制转换两种情况 :
- 16 -
小结
定义抽象类的目的是提供可由其子类共享的一般形式,抽象
类不能实例化 一个类可以实现多个接口,接口可以被多个类实现 instanceof用于判断一个对象的类型 匿名内部类不能有构造方法,不能定义任何静态成员、方法 和类,只能创建匿名内部类的一个实例
- 17 -
- 18 -

自动转换:子类转换成父类时(或者实现类转换成接口)可以自动完成。 例如,Teacher是Person的子类,将一个Teacher对象赋给一个Person类型的 变量时,转换自动完成。 强制转换:父类转换成子类时(或者接口转换成实现类),必须使用强制 转换。例如,Teacher类是Person的子类,如果将一个Person对象赋给一个 Teacher类型变量的时候,必须使用强制转换。
相关文档
最新文档