第10章 抽象类和接口精品PPT课件

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

TestGeometricObject
Run
9
public interface BritishSpy { public String speak(); //英国间谍讲英语 }
public interface GermanSpy { public String sprechen(); //德国间谍讲德语 }
}百度文库
11
假设你只用class,因为不能多重继承,所以,speak()/sprechen()比然声明在同一个class里面 public abstract class DoubleAgent extends Spy/**(略...)*/ { public abstract String speak(); public abstract String sprechen();
10
public class Agency { public static void toMI5(BritishSpy spy) { //军情5处当然只能说英语,做英国间谍 spy.speak(); //spy.sprechen();不可见
}
public static void inGermany(GermanSpy spy) { //spy.speak();不可见 spy.sprechen(); }
Cylinder
-length: double
+getLength(): double +setLength(length: double): void +findVolume(): double
GeometricObject
Circle
Cylinder
Rectangle
4

➢非抽象类不能包含抽象方法,如果一个抽象 父类的子类不能实现所有的抽象方法,它必 须声明为抽象的。
抽象类和接口
第 II篇 的必备基础
第5
第6章 对象和类 第7章 字符串 第8章 继承和多态 第9章抽象类和接口 第- 10章 面向对象建模
第8章后可涉及图形界面 第11章图形界面程序编程
第- 12章 事件驱动程序
第15章 异常和断言 第16章 简单输入输出
1
学习目标
设计和使用抽象类 使用 Calendar 和 GregorianCalendar 类处理日历 声明接口来模拟弱继承关系 了解接口和抽象类的异同 使用包装类 (Byte, Short, Integer, Long, Float, Double, Character, and Boolean) 将基本数据类型包装为对象
6

➢子类可以声明为抽象的,即使它的父类是具 体的。例如object类是具体的,但是它的子 类可以是抽象的。
➢子类可以覆盖它的父类的方法,将其声明为 抽象的。例如,父类的方法在子类中无效时 就可以使用。
7

➢不能用new运算符创建抽象类的实例,但是 抽象类可以作为数据类型。创建一个元素是 GeometricObject 类型的数组:
2
abstract 修饰符
➢ abstract 类
和常规类一样具有数据和方法,但是不能 用new操作符创建它的实例.
需要被继承,实现由子类提供
➢ abstract 方法
只有方法头标志而没有实现
3
Abstract类
UML 图形符号: 抽象的类名和方法名用斜体
Object
GeometricObject
public class DoubleAgent implements BritishSpy, GermanSpy { public String speak() { return "Hello"; } public String sprechen() { return "Gutentag"; }
}
GeometricObject[] geo = new GeometricObject[10];
8
使用 GeometricObject 类
➢Objective: 创建2个几个对象,一个圆和一个 矩形。equalArea方法检查2个对象是否有相 同的面积, displayGeometricObject 方法显 示对象.
➢换句话说,在一个抽象类扩展出来的非抽象 类中,所有的抽象方法必须实现。
5

➢抽象类不能用new运算符实例化,但仍然可 以定义它的构造方法这种构造方法将在它的 子类中被调用。
➢包含抽象方法的类必须是抽象的,但是允许 声明没有抽象方法的抽象类。这种情况下不 能用new操作符创建类的实例,这种类用于 定义新的子类。
public static void main(String[] args) { DoubleAgent da = new DoubleAgent(); BritishSpy es = (BritishSpy) da; GermanSpy gs = (GermanSpy) da; toMI5(da); //MI5也不知道他是一个双重间谍,只知道他是BritishSpy toMI5(es); //更安全 //toMI5(gs); 不可能 inGermany(da); //在德国还是安全的,德国人不知道他的双重间谍身份, //只知道他是GermanSpy inGermany(gs); //inGermany(es); 不可能 }
Circle
-radius: double
+getRadius(): double +setRadius(radius: double): void
Rectangle
-width: double -length: double +getWidth(): double +setWidth(width: double): void +getLength(): double +setLength(length: double): void
-color: String -filled: boolean
+getColor(): String +setColor(String color): void +isFilled(): boolean +setFilled(boolean filled): void +findArea(): double +findPerimeter(): double
相关文档
最新文档