何对象存在, 所以, 如果不将它设置为类相关的, 则没有办法得到任何的对象, 也就无法调用这个 main() 方法 知识准备 :static 变量的引用方法 1. 通过对象定位变量 在 节中我们定义了 StaticTest 类, 并在类中定义了 static 变量 现在我们通

Size: px
Start display at page:

Download "何对象存在, 所以, 如果不将它设置为类相关的, 则没有办法得到任何的对象, 也就无法调用这个 main() 方法 知识准备 :static 变量的引用方法 1. 通过对象定位变量 在 节中我们定义了 StaticTest 类, 并在类中定义了 static 变量 现在我们通"

Transcription

1 第 7 章高级类特性 本章详细介绍 static 变量 方法和初始化段的概念和用法 ;final 数据 方法和类的用 法 ; 抽象类和接口的概念, 以及它们之间的联系和区别 ; 多态概念以及内部类的概念和用 法 ; 最后, 对一些常用的修饰符做了一个简单的总结 7.1 static 关键字 知识准备 :static 概述 通常我们在创建一个类时, 是在描述那个类的对象的外观与行为 只有用 new 创建那个类的对象, 数据存储空间才被分配, 其方法才供外界调用 但是有如下两种情形 : 第一种是只想为特定域分配单一的存储空间, 不考虑究竟创建多少个对象, 甚至根本就不用创建任何对象 ; 另一种是, 希望某个方法不与包含它的类的任何对象关联在一起, 也就是说即使没有创建对象, 也可以调用这个方法 通过 static 关键字可以满足这两方面的需要 使用时, 在声明类的成员如方法 属性乃至自由代码块前面加上 static 这个修饰符 : public class StaticTest { // 静态变量 static int i = 27; // 静态方法 static void staticmethod(){ StaticTest.i++; 实例变量用于描述单个实例的状态, 而类变量用于描述类的状态, 和具体的实例无关 实例方法用于操作实例变量并维护特定实例的状态, 而类方法并不了解单个实例的状态 在 Java 中,static 最常用在 Java 应用程序的入口方法 main() 前面, 用于修饰 main() 方法, 表示 main() 方法是一个类方法 我们在执行一个应用程序的时候, 解析器将会寻找这个 main() 方法, 之所以将它设置为类方法, 是因为在调用这个 main() 方法之前, 还没有任

2 何对象存在, 所以, 如果不将它设置为类相关的, 则没有办法得到任何的对象, 也就无法调用这个 main() 方法 知识准备 :static 变量的引用方法 1. 通过对象定位变量 在 节中我们定义了 StaticTest 类, 并在类中定义了 static 变量 现在我们通过创建对象来引用它 : public class StaticTest { static int i = 27; public static void main(string args[]) { StaticTest st1 = new StaticTest(); StaticTest st2 = new StaticTest(); System.out.println(st1.i + st2.i); 现在, 尽管我们创建了两个 StaticTest 对象, 但它们仍然只占据 StaticTest.i 的一个存储空间 这两个对象都共享同样的 i 此时,st1.i 还是 st2.i 都有同样的值 通过类名直接引用 我们可以直接通过类名来引用 static 变量, 这对非静态成员是不行的 例如, 语句 StaticTest.i++; 引用 static 变量的首选方式是通过类名调用, 一方面这样强调了变量的 static 结构, 另一方面在某些时候也方便了编译器进行优化 类似的逻辑也应用于静态方法, 我们可以像调用其他方法一样通过一个对象来引用, 或者可以通过特殊语法形式 ClassName.method() 加以引用 注意 : 静态方法中只能调用类中的静态成员 7.2 final 关键字 在 Java 的类 方法和变量前面可以加上 final 关键字,final 关键字表示它修饰的类 方法或变量不可被改变 知识准备 :final 数据 16

3 第 7 章高级类特性 final 数据可以是编译时不改变值的常量, 因为在 Java 中不能使用 const 保留字来定义常量, 所以在需要使用常量的场合, 可以使用 final 关键字来修饰 比如 : final int CONST_VAR=30; 在对这个常量进行定义的时候, 必须对其进行赋值 变量的值一旦初始化后, 就不能被改变 如果 final 变量是引用类型的变量, 那么代表你不能改变这个变量的引用 一旦引用被初始化指向一个对象, 就无法再把它改为指向另一个对象 但是可以改变这个变量所引用的对象的属性 我们来看下面这个例子 源文件 :TestFinal.java class Aclass { private int a; // 构造器 public Aclass() { a = 100; public void seta(int thea) { a = thea; public int geta() { return a; // 定义一个类来测试 final 应用变量 public class TestFinal { final Aclass aclass = new Aclass(); public static void main(string[] args) { TestFinal tf = new TestFinal(); tf.aclass.seta(1); System.out.println(tf.aClass.getA()); 在这个例子中, 我们定义了一个类 Aclass, 这个类有一个实例变量 a, 并且有相应的存取方法来对它进行存取 然后, 在类 TestFinal 中, 我们定义了一个 final 的应用类型的变量 aclass, 这个变量的引用是不能被改变的, 但是, 我们可以修改这个引用变量指向的对象属性, 我们通过调用实例的 seta 方法来修改它的实例变量 a, 这个时候这个静态引用变量指向的对象的属性值被修改成了 1 17

4 在编程实践中, 我们还经常使用静态常量, 也就是同时用 static 和 final 来修饰 变量 一个既是 static 又是 final 的域只占据一段不能改变的存储空间 提示 : 根据 Java 命名规范, 如果在编译的时候, 就可以确定 final 变量的值, 那么, 此常量的名字应该都大写, 并且指出完整含义, 如果需要用几个单词描述, 那么单词之间用 _ 来分隔, 例如 : static final int MAX_TAX_RATE = 20; 相反的, 在下面情况下可以不使用上面的命名规则 : final 变量无法在编译的时候就获得值, 而必须在执行的时候才能得到值 比如, 我们在 节的示例中的 final 变量 aclass: final Aclass aclass = new Aclass(); 在编译的时候, 程序不会执行 new 动作来实例化一个 Aclass, 并赋值给 aclass, 所以, 就没有使用上面的命名规则来给 final 变量命名 知识准备 :final 方法 final 关键字可以将方法锁定, 以防任何继承类修改它的含义, 确保在继承中使方法的行为保持不变, 并且不会被覆盖 比如, 下面的例子中, 类 B 编译不会通过, 因为它试图覆盖父类中的一个 final 方法 父类 : public class A{ public final void methoda(){ // 子类 : public class B extends A { // 此处报错, 因为它试图覆盖父类中的静态方法 public void methoda() { 如果将父类 A 中的 methoda() 改成 private 的, 代码如下 父类 : public class A { private final void methoda() { 子类 : public class B extends A { // 此处不报错, 因为它只定义了一个 methoda() public void methoda() 18

5 第 7 章高级类特性 { 注意, 类 A 中的 methoda(), 它的访问修饰符为 private, 此时, 方法 methoda() 被隐式指定为 final 由于无法取用 private 方法, 所以也就无法覆盖它 因此, 类 B 中的 methoda() 只是新定义的一个方法而不是覆盖父类的方法 所以, 此时编译这个程序将不会报错 知识准备 :final 类 如果将 final 关键字放至类的定义之前, 则将这个类的整体定义为 final 这样的类不可以被继承, 比如 java.lang.math 如果不希望你的类被继承, 可以将类定义为 final 类, 该类的设计永远不需要做任何变动, 也不会存在子类 注意 : final 类中所有的方法都隐式指定为 final, 因为无法覆盖它们 在 final 类中可以给方法添加 final 修饰词, 但这不会有任何意义 7.3 抽象类 知识准备 :abstract 概述 抽象的概念我们其实并不陌生, 抽象其实就是从众多的事物中抽取出共同的 本质性的特征, 而舍弃其非本质的特征 例如苹果 香蕉 生梨 葡萄 桃子等, 它们共同的特性就是水果 得出水果概念的过程, 就是抽象的过程 在编写一个对象的时候, 我们会将某一类事物的共同特征抽象出来, 编写一个框架类 在这个类中我们可能会对一些类的方法进行定义, 但是并不具体实现 而是将这些方法的实现放到它的子类中去, 不同的子类可以用不同的方式来实现这些方法, 这样可以增强类设计的灵活性 比如, 我们定义了一个表示制作手机图标的基础图形的类 IconShape, 这个类有一些属性, 还有一个用于计算图标面积的方法, 但是, 对于不同形状的图标, 计算方式是不同的, 我们不能将所有形状图标的计算方式都放入这一个类中, 那样这个类将很大很混乱 通过关键字 abstract, 我们可以在父类 IconShape 中不实现这个方法, 而将它的实现放到子类中去 这样不同的子类就可以以不同的方式实现父类中的抽象方法 从上面的讨论中可以看出来, 我们有时候只是定义某些类的框架作为导出类的通用接口, 但不具体实现, 而将具体实现放到子类中去完成 这个时候, 我们可以将这个类定义为 abstract 的, 而将没有实现的方法声明为 abstract 19

6 问 : 抽象类可以被实例化吗? 答 : 不可以, 因为 abstract 类中具有没有被实现的方法, 所以, 抽象类不能被实例化 知识准备 :abstract class 包含抽象方法的类叫做抽象类 定义方法如下 : public abstract class IconShape { /* 成员变量声明 */ // 抽象方法 public abstract double iconarea(); 在类名之前加 abstract 关键字, 就可以将一个类定义为抽象类 在抽象类中定义抽象方法是在方法返回值类型之前加上关键字 abstract 抽象方法只需要声明, 不需要实现 如果一个类中定义了一个或多个抽象方法, 那么这个类必须被限定为抽象类 但是反过来, 抽象类里面并非一定要有抽象方法 比如当你定义了一个类, 但是又不想让它被直接实例化的时候, 可以使用抽象类的方法来实现 子类继承抽象类时, 语法和继承普通父类相同 例如 : public class Circle extends IconShape { public double radius;// 半径 public static final double PI = 3.1; /** 实现父类抽象方法 : 求圆形面积 */ public double iconarea () { return PI * radius * radius; 注意 : 子类必须覆盖所有抽象方法才能被实例化, 否则这个子类还是个抽象类 总结一下, 在以下任一条件成立时, 类必须定义成抽象类 : 类中有至少一个抽象方法 类继承了父类中的抽象方法, 但是至少有一个抽象方法没有实现 类实现了某个接口, 但没有全部实现接口中的方法 任务一 :abstract 实例 150

7 第 7 章高级类特性 1. 任务描述完成 节中 IconShape 抽象类的定义和继承的实例, 要求有完整的类的定义及对象初始化 2. 技能要点 掌握抽象类和抽象方法的定义 掌握继承抽象类的方法, 掌握继承抽象类全部抽象方法和部分抽象方法时子类定义的区别 3. 任务实现过程 (1) 首先我们定义一个用来表示各种图标形状的类 IconShape, 这个类有两个抽象方法, 一个用于返回图形的形状, 一个用于返回图形的面积 源文件 :IconShape.java public abstract class IconShape { private String color; /** * 得出面积 */ public abstract double iconarea (); /** * 得到形状 */ public abstract String gettype(); // 用于设置 / 获取 颜色 属性的方法 public String getcolor() { return color; public void setcolor(string thecolor) { color = thecolor; 注意, 这是一个抽象类, 不能直接实例化它 (2) 编写类, 代码如下 源文件 :IconSquare.java public abstract class IconSquare extends IconShape { protected double a, b; public IconSquare() { 151

8 this.a = 0.0; this.b = 0.0; public IconSquare (double i, double j) { this.a = i; this.a = j; /** * 实现父类中的抽象方法 */ public double iconarea () { return a*b; 这是一个表示长方形的类 我们注意到, 这个类继承了父类 IconShape, 在父类的基础上新增了一些属性及相应的方法 在此类中实现了父类中的 iconarea() 方法, 返回长方形面积 但是并没有实现父类中另一抽象方法 gettype(), 也许需要子类进一步细化图形是长方形还是正方形 所以, 此类也要定义为 abstract 抽象类 当然, 这里只是为了让大家理解继承抽象类的机制, 在实际操作中不需要这样细化 (3) 再编写一个类表示圆形代码如下 源文件 :IconCircle.java public class IconCircle extends Shapes { private double radius; public static final double PI = 3.1; public IconCircle() { this.radius = 0.0; public IconeCircle(double r) { this.radius = r; /** * 实现父类的抽象方法 */ public double iconarea() { ; return PI * radius * radius 152 public String gettype() { return " 圆 ";

9 第 7 章高级类特性 public static void main(string args[]) { IconCircle ic = new IconCircle(6); System.out.println(" 图标形状 :" + sc.gettype()); System.out.println(" 图标面积 :" + sc.iconarea()); IconCircle 类也继承了类 IconShapes, 并且覆盖了父类中的两个抽象方法 但它对抽象方法 iconarea() 的实现方式和 IconSquare 是不一样的 创建抽象类和抽象方法很有用, 它们可以使类的抽象性明确, 让使用者明白如何使用它们, 而且抽象类还是很有用的重用工具 注意 : 区分没有实现的方法和空方法, 下面这个方法是没有实现的方法 : public int methoda(); 而下面这个方法是空方法体的方法 : public int methodb() { 没有实现的方法可以用 abstract 来修饰, 而空方法体方法却不能使用 abstract 来修饰, 它已经实现了方法, 只是在这个方法中什么动作也没有做而已 7.3. 知识拓展 : 模板设计模式 有时候, 我们会碰到另外的一种情况, 比如, 银行利息的计算, 都是利率乘以本金和存款时间, 但是, 各种存款方式计算利率的方式都不同, 一般而言, 定期的存款利率比活期的利率要高 ; 而定期的时间越长, 它的利率也越高 因此, 在设计 银行账户 这个类的时候, 可以将计算利息这个方法定义成抽象方法, 然后, 再在各种不同类型账号的子类中具体实现这个方法 但是, 对于这个方法而言, 有更好的一种设计思路 : 将这个方法中计算利息的算法骨架搭建出来, 而对于一些细节, 推迟到子类中来实现 这种设计的好处是, 避免了子类设计中的随意性 我们来看上面这个思路的实现方式 源文件 :LoanAccount.java abstract class LoanAccount { // 利息 private double interest; // 本金 private double fund; 153

10 public double calculateinterest() { // 用于计算利息的算法 : 本金 * 利率, // 但是利率的算法实现并没有在这个类中实现 interest = getfund() * getinterestrate(); System.out.println(interest); return interest; public void setfund(double fund) { this.fund = fund; public double getfund() { return this.fund; /** * 不同的存款类型有不同的利率, 因此不在这个父类中实现利率的计算方法, 而将它放到子类中实现 */ protected abstract double getinterestrate(); 对于刚才讨论的银行的账户的例子, 我们可以给所有类型的账户定义一个超类 LoanAccount, 在这个超类中, 有一个用于计算利息的方法 caculateinterest(), 已经将它的算法写好了, 这个方法返回一个 本金 * 利率 的值 但是, 因为其中的利率根据存款类型的不同而不同, 所以没有具体实现获得利率的方法, 而是将这个获得利率的方法放到子类中去实现, 根据不同的子类, 设计出不同的获得利率的方法 下面是继承了这个抽象类的一个子类 : class AccountA extends LoanAccount{ // 只需要实现父类中没有实现的用于获取利率的抽象方法 public double getinterestrate(){ return 10.0; 在这个子类中, 没有加上自己的属性, 它只是简单地实现了父类中的抽象方法 getinterestrate, 这样, 这个类就成了一个完整的账户类了 可以使用以下的方式来使用这个类 : 源文件 :TestAccount.java public class TestAccount { /** 本金 * */ public static void main(string args[]) { AccountA account = new AccountA(); 15

11 第 7 章高级类特性 account.setfund(100.0); account.calculateinterest(); 7. 接口 在 Java 中,interface 关键字使抽象的概念更向前迈进了一步, 因为 interface 关键字产生一个完全的抽象类 接口 接口是方法声明和常量值定义的集合 在抽象类中, 有些方法被实现, 而有些方法只有方法的声明, 没有方法的具体实现 ( 抽象方法 ), 而在接口中, 没有提供任何具体的实现 一个接口可以理解为 : 所有实现了该特定接口的类都应该长这样 Java 中不支持多重继承, 即一个类只能有一个父类, 即使是抽象类 单继承使得程序简单且易于管理, 但是有一定的局限性 接口可以很好地解决单继承的缺点, 一个类可以实现多个接口 7..1 知识准备 : 接口的定义 接口的定义和类的定义相似, 分为接口声明和接口体 和类定义不同的是, 接口的定义不使用关键字 class, 而是用另外一个关键字 interface, 接口定义的基本格式如下 : <modifier> interface <name>[extends <superinterface>] { [<attribute_declarations>] [<abstract_method_declarations>] 在接口中也可以定义常量, 但是不能有变量 接口的成员属性都会被自动加上 public static 和 final, 而对于接口中的方法, 也会自动将它设置为 public 接口中的方法只需要声明, 不需要方法体, 即 { 和抽象类中的抽象方法不一样, 这些没有被实现的方法不需要加上关键字 abstract 来将它声明为抽象方法 我们来看一个接口的定义 源文件 :ScreenBrightness.java public interface ScreenBrightness { public int DEFAULT_BRIGHTNESS = 10; void brightup (); void brightdown (); 155

12 我们定义了接口 ScreenBrightness 来表示手机屏幕的亮度 在这个接口中, 定义了一个接口属性 DEFAULT_BRIGHTNESS, 用来表示屏幕默认亮度 ; 定义了两个方法 : 用于表示增加亮度的 brightup() 和用于表示降低亮度的 brightdown() 在前面我们说过, 接口的属性将会被自动加上 public static final 修饰, 所以, 我们编写一个应用程序来验证它 源文件 :TestScreenBrightness.java public class TestScreenBrightness { public static void main(string[] args) { System.out.println(ScreenBrightness. DEFAULT_BRIGHTNESS); 对于 static 的属性, 可以采用 类名. 属性名 来直接调用, 这里类名可以替换为接口名 所以, 在这个类的 main() 方法中, 使用 接口. 属性名称 来访问接口的方法, 编译并运行后, 将向控制台打印出如下的信息 : 10 它就是接口中我们定义的属性 DEFAULT_BRIGHTNESS 的值 从中也可以看出, 接口的属性确实已经被加上了 public static 关键字 那么, 如何验证它还被自动加上了 final 关键字呢? 很简单, 只需在 TestScreenBrightness 的 main() 方法中写一条语句, 试图修改 DEFAULT_BRIGHTNESS 的值, 看看会发生什么结果就可以了 : DEFAULT_BRIGHTNESS = 15; 重新编译这个程序, 将会出现如下的错误 : TestScreenBrightness.java:5: cannot assign a value to final variable DEFAULT_BRIGHTNESS ScreenBrightness. DEFAULT_BRIGHTNESS = 10; 1 error 显然, 属性 MIN_BRIGHTNESS 确实已经被加上了 final 修饰符 7..2 知识准备 : 使用接口 对于抽象类, 我们在子类中用 extends 来继承它 但是, 对于接口, 在子类中必须要用另外一个关键字 implements 来 实现 它 一个类可以继承一个父类, 并且同时实现一个或多个接口, 多个接口之间用, 来分隔开 类实现接口的语法格式如下 : <modifier> class <name> [ extends <superclass> ] [implements <interface> [,<interface>]* ] { <declarations> * 一个 实现 了接口的类必须实现该接口的所有方法, 即为这些方法提供方法体 或 者, 将没有实现的方法定义为抽象的方法, 此时, 类也必须定义为抽象类 156

13 第 7 章高级类特性 在 Java 中, 一个类只能继承一个父类, 也就是说,Java 不支持多继承 但是, 一个类可以实现多个接口 通过接口, 可以模拟实现多继承 7..3 任务二 : 使用接口的例子 1. 任务描述 设计一个类, 用来设置手机的屏幕亮度及铃音音量 要求该类实现多个接口 2. 技能要点 掌握接口的定义和接口的使用 体会接口模拟实现多继承的作用 3. 任务实现过程 (1) 首先我们定义一个用于表示屏幕亮度调节的接口 ScreenBrightness 源文件 :ScreenBrightness.java public interface ScreenBrightness { public int DEFAULT_BRIGHTNESS = 10; void brightup (); void brightdown (); 这个接口定义了一个接口属性 DEFAULT_BRIGHTNESS, 用来表示屏幕默认亮度 ; 定义了两个方法 : 用于表示增加亮度的 brightup () 和用于表示降低亮度的 brightdown () (2) 定义另外一个用于表示手机音量的接口 Volume 源文件 :Volume.java public interface Volume { public int DEFAULT_VOLUME = 5; void volumeup (); void volumedown (); 这个接口定义了一个接口属性 DEFAULT_ VOLUME, 用来表示默认音量 ; 定义了两个方法 : 用于表示增加音量的 volumeup () 和用于表示降低音量的 volumedown () (3) 定义 MobileSet 类, 实现 ScreenBrightness,Volume 源文件 :MobileSet.java Public class MobileSet implements ScreenBrightness,Volume{ public int brightness ; public int volume ; public MobileSet(){ 157

14 this.brightness = DEFAULT_BRIGHTNESS; this.volume = DEFAULT_VOLUME; // 实现 ScreenBrightness 中的方法 public void brightup (){ this.brightness++; public void brightdown (){ this.brightness--; // 实现 Volume 中的方法 public void volumeup (){ this.volume++; public void volumedown (){ this.volume--; public static void main(string[] args) { MobileSet ms = new MobileSet(); ms.brightup(); ms.volumedown(); 在这个类中, 我们同时实现了 ScreenBrightness 和 Volume 这两个接口, 然后, 在这个类中将两个接口中的方法实现, 使该类拥有调节手机屏幕亮度和手机音量的双重功能 这样, 就实现了 多继承 的功能 注意 : 接口中的方法默认是 public 的, 所以类在实现接口方法时一定要用 public 来修饰 7.. 知识准备 : 接口的扩展 接口和类类似, 也可以从一个父接口中派生 接口的继承也是使用 extends 关键字来完成的 接口继承的基本语法如下 : <modifier> interface <name> [ extends <super_interface>,<super_interface>]{ [<attribute_declarations>] [<abstract_method_declarations>] 和类继承类似, 继承的接口也具有了父接口的特性 和类的继承不同的是, 在接口的继承中, 可以继承多个接口, 只需要将继承的各个接口用逗号, 隔开就可以了 通过继承, 可以很容易地在接口中添加新的方法声明, 还可以通过继承在新接口中组合数个接口 158

15 第 7 章高级类特性 我们可以将任务二中的接口实现改为接口继承 我们定义了一个新的接口 MobileSet, 让它同时继承接口 ScreenBrightness 和 Volume : Public interface MobileSet extends ScreenBrightness,Volume{ void showdata(); 在这个接口中, 除了从 ScreenBrightness 和 Volume 继承的方法外, 在这里新增了一个方法 :showdata(), 用于显示设置的数据 这样就通过接口的组合扩展出了一个新的接口 现在, 我们可能对 Java 中的继承方式有了更深的了解 : 所谓 Java 不支持多继承, 指的是不支持类的多继承 7..5 技能扩展任务 : 抽象类与接口 1. 任务描述 学习了这两节内容后, 对比总结抽象类和接口的概念和使用特点的异同, 如表 7-1 所示 表 7-1 抽象类与接口的异同 抽象类 接口 相同 对象不能直接实例化, 通过多态性, 可以由其子类实例化 不相同 包含一般方法 抽象方法 常量 变量可以由构造方法抽象类可以实现多个接口继承时, 单继承会有局限 包含常量或抽象方法不能有构造方法接口不能继承一个抽象类解决单继承带来的局限 2. 技能要点 清晰地梳理抽象类和接口的概念 体会抽象类和接口的使用场合 3. 任务实现过程 在 Java 中, 继承体现的是 is a 的关系, 而接口体现的则是 has a 聚合的含义 接口可以说是特殊的 抽象类, 从开发上讲应优先使用接口, 因为接口运行了多继承机制 7.5 多态 159

16 7.5.1 知识准备 : 多态概述 在面向对象的程序语言中, 多态是继数据抽象和继承之后的第三种基本特征 在 Java 中, 对象变量是多态的 一个类型为 Aclass 的变量既可以指向类型为 Aclass 的对象, 又可以指向 Aclass 的任何子类的对象 实际上多态的作用是消除类型之间的耦合关系 现在假设有一个类 Aclass, 由它派生了一个子类 Bclass, 那么, 我们可以将子类 Bclass 的对象赋给父类变量 : Aclass a = new Bclass(); 这其实体现了 Java 中的所谓 替换原则 (substitution principle) : 无论何时, 只要程序需要一个父类对象, 那么就可以用一个子类对象来替代它 这种能力也叫动态绑定 多态带来的一个明显好处就是 : 以多态的形式来传递参数, 增强了参数类型的灵活性 例如, 我们需要在类 CardManager 中添加一个方法, 该方法根据传入的对象输出手机名片中的电话号码 其中类 FriendCard 的对象代表朋友的名片 ; 类 ColleagueCard 的对象代表同事的名片 其中 FriendCard 和 ColleagueCard 均为 Card 的子类 可以这样来定义这个方法 : class CardManager{ public void getfriendnumber (FriendCard fc){ // 根据参数 fc 的 number 属性输出朋友的电话号码 public void getcolleaguenumber (ColleagueCard cc){ // 根据参数 cc 的 number 属性输出同事的电话号码 如果使用多态的概念, 我们只要定义一个方法来计算就可以了 : public class CardManager { public int getnumber (Card c) { // 根据参数 c 的 number 属性输出该名片的电话号码 如果输出一个名片的电话号码, 只需将名片的对象当作参数传递给这个方法, 如果放置一个朋友的名片, 只需将对应的对象当作参数传递给这个方法 在使用多态传递参数的时候, 有一个问题需要注意 : 一个对象只能有一种确切的数据类型, 如果将一个变量声明为父类的引用类型, 那么, 即使它引用的对象是某个子类的对象, 编译器也只是将这个对象当作父类型对象 因此, 若一个引用类型变量声明为父类的类型, 但实际引用的是子类对象, 那么该变量就不能再访问子类中添加的属性和方法 160

17 第 7 章高级类特性 比如, 我们用 Card 来声明一个变量, 然后再将这个变量指向 FriendCard, 这个时候就不能用这个变量来调用子类 FriendCard 特有的方法或属性了 : Card c; C = new FriendCard (); c.showname();// 调用 FriendCard () 类中的方法错误 除了父类和子类之间的这种多态机制外, 接口和实现它的类之间也可以像父类和子类一样实现多态机制, 只需将接口看成实现它的类的 父类 即可, 对此, 不再赘述 知识准备 :instanceof 运算符 Java 语言的多态性机制导致了引用变量的声明类型和其实际引用对象的类型可能不一致 为更准确地鉴别一个对象的真正类型,Java 语言引入了 instanceof 操作符, 其使用格式为 : < 引用类型变量 > instanceof < 引用类型 > 这是一个 boolean 类型的表达式, 指出对象是否是特定的一个实例 当 instanceof 左侧的引用类型变量所引用对象的实际类型是其右侧给出的类型或其子类类型时, 整个表达式的结果为 true, 否则为 false 我们来看一个例子, 请看下面这些类的关系 ( 类 Student 和 Teacher 派生自 Person): public class Card{ public class FriendCard extends Card{ public class ColleagueCard extends Card{ 现在可以改造上一节的 CardManager 类中的 getnumber() 方法, 接收一个 Card 类型参数, 然后再在运行时根据传入的参数类型来做不同的操作 此时, 就可以用 instanceof 来对输入的参数作判断 : public void getnumber (Card c){ if(c instanceof FriendCard) {//statement 1 if(c instanceof ColleagueCard) {//statement 知识准备 : 引用类型数据转换 161

18 在讲述数据类型的时候, 我们已经知道, 各种简单数据类型之间是可以进行相互转换的, 有些转换可以通过系统自动完成, 而有些转换必须在程序中通过强制转换来完成 而对于引用类型, 也有一个相互转换的机制 同样的, 在引用类型数据进行转换的时候, 分为自动转换和强制转换两种情况 将子类的实例转换为父类的实例总是可行的, 因为子类的实例也是父类的实例 把父类对象转换为子类对象时, 必须使用强制类型转换, 为使转换成功, 必须确保转换的对象是子类的一个实例 当从子类转换成父类的时候 ( 或者实现类转换成接口, 下同 ), 转换可以自动完成, 比如 FriendCard 是 Card 的子类, 如果将一个 FriendCard 对象赋给一个 Card 类型的变量, 造型会自动完成 当从父类转换成子类的时候 ( 或者接口转换成实现类 ), 必须使用强制造型, 比如, 需要将一个 Card 对象赋给一个 FriendCard 类型变量的时候, 必须使用强制类型转换 对象的强制转换可以使用运算符 () 来完成, 格式如下 : SuperClass sup = new SubClass(); SubClass sub = (SubClass)sup; 需要注意的是, 无论是自动造型还是强制造型, 都只能用在有继承关系的对象之间 并不是任意的父类类型数据都可以被造型为子类类型, 只有多态情况下, 原本就是子类类型的对象被声明为父类的类型, 才可以通过转换恢复其 本来面目, 否则会在程序运行时出错 所以进行转换时确保该对象是另一个类的实例, 可以利用 instanceof 运算符来完成 比如,Card 类有两个子类 :FriendCard 和 ColleagueCard, 还有一个单独的类 Test 我们来看下面的代码片断 : Test t = new Test(); Card c = new FriendCard(); ColleagueCard cc = (ColleagueCard)c;// 将会出现运行时错误 FriendCard fc = (FriendCard)t;// 编译时就会报错, 因为 Test 类和 FriendCard 之间没有任何的继承关系 此时, 可以先使用 instanceof 来判断要转换的对象是否为可以转换的类型, 例如 : Card c = FriendCard(); if(c instanceof ColleagueCard){ ColleagueCard cc = (ColleagueCard)c; 这样就可以避免出现运行时错误 总结起来, 父类对象与和子类对象的转化需要注意如下的原则 : (1) 子类对象可以被视为是其父类的一个对象 (2) 父类对象不能当成是其某一个子类的对象 (3) 如果一个方法的形式参数定义的是父类对象, 那么调用这个方法时, 可以使用子类对象作为形式参数 162

19 第 7 章高级类特性 () 如果父类对象引用指向的实际是一个子类对象, 那么这个父类对象的引用可以用强制类型转换转化成子类对象的引用 在转换之前要使用 instanceof 运算符进行判断 7.6 内部类 内部类有时也称为 嵌套类 (nested class), 是定义在一个类内部的类, 它可以是其他类的成员, 也可以在一个语句块的内部定义 内部类的概念是在 JDK1.1 中被引入的 引入内部类, 主要有以下一些考虑 :. 一个内部类的对象能够访问创建它的对象的实现, 包括私有数据 对于同一个包中的其他类来说, 内部类能够隐藏起来 匿名内部类可以方便地用在回调方法 (Callback Method) 中, 典型应用是图形编程中的事件处理 在最初, 内部类看起来像是一种代码隐藏机制, 但是随着学习的深入你将了解到, 内部类远不止如此, 它了解外围类, 并能与之通信 学会使用内部类, 是掌握 Java 高级编程的一部分, 它可以让你更优雅地设计程序结构 知识准备 : 内部类定义 内部类是定义在一个外围类的内部 这里所谓的 类的内部, 指的是在类定义的两个大括号之间, 定义如下 : public class OuterClass{ // 可以在这个类的内部的任何地方定义内部类 内部类可以定义在类中的任何位置, 甚至方法体中也可以定义内部类 但是要注意, 下面的放在同一个程序文件 A.java 中的类 B 不是类 A 的内部类, 这是刚开始接触内部类的程序员比较容易引起混乱的地方 : public class A{ //statements class B{ //statements 这两个类虽然写在用一个文件中, 但它们之间是两个独立的类, 它们之间并没有什么联系 将这个类文件编译之后, 会产生两个 class 文件 :A.class 和 B.class 163

20 可以将一个内部类定义成一个静态内部类, 只需要在内部类定义前面加上 static 关键字 例如 : 源文件 :Outer.java public class Outer{ private int a = 5; // 定义一个内部类, 名为 "Inner" public class Inner { // 内部类可以有私有属性 private int i=1; public void innermethod(){ System.out.println( "a=" + a + ", i=" + i ); public void testtheinner() { Inner i = new Inner(); i. innermethod(); 在这个 Outer 类中定义了一个内部类, 这个内部类可以访问外部类的私有属性 编译这个 Outer.java, 将会产生两个 class 文件 :Outer.clas 和 Outer$Inner.class, 前面一个类文件是 Outer 类文件, 后面一个是内部类类文件, 它用 $ 来分隔开内部类和外部类 我们可以看到, 在 Outer 类内部使用到内部类时, 与使用普通类没什么不同 但是在 Outer 类范围以外的其他应用中, 实例化内部类必须首先有一个外部类实例存在, 然后通过外部类实例来实例化内部类 : Outer.Inner in=new Outer().new Inner(); 当然, 如果内部类是 static 的, 也可以用下面方法 : Outer.Inner in=new Outer.Inner(); 我们来看一下, 假设现在需要在另一个应用程序中使用刚才定义的类 Outer 的内部类 Inner, 我们该如何来实现? 请看下面代码 : 源文件 :TestInner.java public class TestInner { public static void main(string[] args) { Outer.Inner oi = new Outer ().new Inner(); oi. innermethod(); 编译并运行这个程序, 将在控制台上打印出 :a=5, i=1 和一般的类不同, 内部类可以使用 protected 和 private 来修饰, 以限制在它的外部类以外的地方对它的访问, 比如, 上面的 Outer 中的 Inner 内部类就可以定义成如下的样子 : 16 public class Outer{

21 第 7 章高级类特性 private class Inner { 此时, 就不能在 Outer 的范围之外使用 Inner 类了 知识准备 : 局部内部类 Inner 类也可以定义在方法的内部, 或者类的一个自由块中, 此时, 内部类是一个局部的内部类, 只能在方法体或者自由块中使用 局部内部类不能有访问说明符, 因为它不是外部类的一部分 ; 但是它可以访问当前代码块内的常量, 以及此外部类的所有成员 在类外不可直接访问局部内部类, 以保证局部内部类对外是不可见的 注意 : 如果要在方法体中定义的局部内部类中使用方法的局部变量 ( 如方法的参数 i), 需要将这个局部变量定义为 final 的 任务三 : 局部内部类 1. 任务描述设计一个类 Outer, 该类方法 test 中定义局部内部类 LocalClass, 在内部类中定义方法 localtest 尝试内部类与外部类方法的互相调用, 体会局部内部类的使用方法 2. 技能要点 掌握局部内部类的定义 掌握局部内部类与外部类方法间的调用关系 3. 任务实现过程 (1) 定义一个类 Outer, 在这个类中定义了一个方法 test(), 在它的方法体内定义了一个局部内部类 LocalClass, 这个内部类只能在这个方法体内使用 (2) 在此类中定义一个方法来调用方法 localtest(), 输出语句显示方法被调用 localtest() 方法中试图调用 test 的入口参数 i, 编译器将会出现类似下面的错误 ( 将 i++ 前的注释去掉后的错误 ): final Outer.java:10: local variable i is accessed from within inner class; needs to be declared 1 error System.out.println("i="+i);; ^ 165

22 如果将方法 test() 的参数 i 加上 final 就可以了 ublic class Outer { public void test(int i) { class LocalClass { public void localtest() { System.out.println(" 局部内部类的方法被调用 "); // System.out.println("i="+i); // 错 (2) 在方法 test() 中可直接初始化局部内部类 LocalClass LocalClass lc = new LocalClass(); lc.localtest(); (3) 外部类 Outer 不可直接访问局部内部类 LocalClass,Outer 类对象调用 test() 方法间接访问内部类 完整程序如下 : public class Outer { public void test(int i) { class LocalClass { public void localtest() { System.out.println(" 局部内部类的方法被调用 "); // System.out.println("i="+i); // 错 LocalClass lc = new LocalClass(); lc.localtest(); public static void main(string[] args) { Outer o = new Outer(); o.test(1); 7.6. 知识准备 : 匿名内部类 内部类的另外一个比较特别的地方就是, 可以不用给它指定一个类名, 就可以直接拿来使用, 这就是匿名内部类 匿名内部类可以看做是一种特殊的局部内部类, 它是通过匿名类实现接口 如果恰好只要创建一个局部内部类的对象, 可以使用匿名内部类 ( 肯定存在于一个表达式中 ) 这个用法经常用在图形界面的事件处理中 示例代码如下: public class AnInnerTest { // 我们首先定义一个接口 interface AnInfc { public void printinfo() ; 166 public static void main(string[] args) { AnInnerTest a = new AnInnerTest(); AnInfc af = a.testan(); af.printinfo();

23 第 7 章高级类特性 public AnInfc testan (){ //AnInfc 为接口, 此处返回该接口的一个实现类的实例 return new AnInfc(){ public void printinfo() { System.out.println("anonymous class"); ; 满足下面的一些条件, 使用匿名内部类是比较合适的 : 只用到类的一个实例 类在定义后马上用到 类非常小 (Sun 推荐是在 行代码以下 ) 给类命名并不会导致你的代码更容易被理解 使用匿名内部类时, 要记住以下几个原则 : 匿名内部类不能有构造方法 匿名内部类不能定义任何静态成员 方法和类 匿名内部类不能是 public,protected,private,static 只能创建匿名内部类的一个实例 一个匿名内部类一定是在 new 的后面, 用其隐含实现一个接口或实现一个类 因匿名内部类为局部内部类, 所以局部内部类的所有限制都对其生效 任务四 : 匿名内部类练习 1. 任务描述 在上一节的例子中已经通过实现接口的形式使用了匿名内部类 现设计程序使用继承抽象类的形式使用匿名内部类 2. 技能要点 掌握匿名内部类的使用方法 3. 任务实现过程 public class AnInnerTest { interface AnInfc { public void printinfo() ; public static void main(string[] args) { Person p = new Person("Alex"){ public void printinfo() { System.out.println("name " + this.getname()); ; 167

24 // 调用该抽象方法 p.printinfo(); abstract class Person{ private String name; public Person(String n){name = n; protected String getname() {return name; protected void setname(string name) {this.name = name; public abstract void printinfo(); 知识准备 : 内部类特性 内部类是一个复杂的应用, 除了上面提到的一些特点外, 它还有以下一些特点 : (1)Inner class 可以声明为抽象类, 因此可以被其他的内部类继承, 也可以声明为 final 类型 (2) 和外层类不同,Inner class 可以声明为 private 或 protected (3)Inner class 可以声明为 static 类型, 但此时就不能再使用外层封装类的非 static 的成员变量 () 非 static 的内部类中的成员不能声明为 static 类型, 只有在顶层类或 static 的内部类中才可声明 static 成员 7.7 修饰符的适用范围 我们已经学习了不少的修饰符, 如用于访问控制的 public protected private 等, 现在将这些修饰符适用的地方作一个简单的总结, 如表 7-2 所示 其中,public protected Default 和 private 是互斥的修饰符, 它们只能选择其中之一作为某个特征的修饰符, 其他几个都可以混合使用 protected 和 private 可以用于修饰内部类 表 7-2 修饰符适用范围 关键字 class 属性 方法 构造器 自由块 内部类 public Y Y Y Y Y protected Y Y Y Y Default Y Y Y Y Y Y private Y Y Y Y final Y Y Y Y abstract Y Y Y static Y Y Y Y 168

25 第 7 章高级类特性 7.8 本章小结 通过本章的学习, 读者们详细了解了 static 关键字及 final 关键字的用法 ; 了解了 Java 中重要的概念抽象及接口, 并对其用法有了基本掌握 本章介绍了多态的概念和用法, 对数据类型转换做了进一步剖析, 本章还重点介绍了内部类的定义和种类, 这是在 Java 高级编程中很重要的概念 相信通过本章的学习, 大家对 Java 的理解上了一个台阶, 本章所述的内容还有很深的挖掘空间, 大家通过进一步学习, 会逐步编写出规范而优雅的程序 课后练习题一 选择题 1. 下列描述错误的是 ( ) A. 一个匿名内部类必须声明为 final B. 一个匿名内部类可以声明为 private C. 一个匿名内部类可以实现多个接口 D. 一个匿名内部类可以访问它所在的外部类中的私有成员变量 2. 以下说法正确的是 ( ) A.static 可以修饰所有的方法, 包括构造器 B.static 可以用来修饰自由块 C.static 修饰的变量只能被 static 方法使用 D. 类的 static 不能通过类的实例访问 3. 下列描述正确的是 ( ) A. 用 final 修饰的方法不能重载 B. 如果一个类中有 abstract 方法就必须声明为 abstract 类 C.abstract 类中至少有一个 abstract 方法 D.static 方法中不能处理非 static 的数据. 下列描述正确的是 ( ) A. 程序中需要父类对象的地方都可以用子类对象替代 B. 程序中需要子类对象的地方都可以用父类对象替代 C. 父类引用指向子类对象时可以访问子类中的方法 D. 父类引用指向子类对象时可以访问子类中重写的方法 5. 下列描述正确的是 ( ) A. 接口在定义时跟类一样都是用关键字 class. B. 一个类只能继承一个父类但是可以实现多个接口 169

26 C. 用 final 修饰的类不能被继承 D. 在接口中定义的方法都是 public 的二 简答题 1. 简述 static 关键字的用法 2. 简述 final 关键字的用法 3. 简述抽象类和接口的区别 三 编程题 1. 创建一个抽象类 Instrument, 里面包含一个抽象方法 play(), 再创建一个 Wind 类, Wind 继承 Instrument 类, 并实现了抽象方法 play() 创建一个 Wind 类的对象, 让一个 Instrument 类的引用指向它 2. 在某个包内创建一个接口, 内含三个方法, 然后在另一个包中实现此接口 170

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

软件工程文档编制

软件工程文档编制 实训抽象类 一 实训目标 掌握抽象类的定义 使用 掌握运行时多态 二 知识点 抽象类的语法格式如下 : public abstract class ClassName abstract void 方法名称 ( 参数 ); // 非抽象方法的实现代码 在使用抽象类时需要注意如下几点 : 1 抽象类不能被实例化, 实例化的工作应该交由它的子类来完成 2 抽象方法必须由子类来进行重写 3 只要包含一个抽象方法的抽象类,

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

OOP with Java 通知 Project 3: 4 月 19 日晚 9 点

OOP with Java 通知 Project 3: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 4 月 19 日晚 9 点 复习 Upcasting 同一基类的不同子类可以被视为同一类型 ( 基类 ) 放宽类型一致性 简化接口 class A{ class B{ A a = new A(); B b = new B(); // A a = new B(); compile

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class - Table.class

More information

Microsoft Word - 新1-12.doc

Microsoft Word - 新1-12.doc 实训 5 面向对象编程练习 实训 5 面向对象编程练习 5.1 实训目的 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想 以及如何创建类 和对象 了解成员变量和成员方法的特性 5.2 实训要求 编写一个体现面向对象思想的程序 编写一个创建对象和使用对象的方法的程序 5.3 实训内容 5.3.1 创建对象并使用对象 1 定义一个 Person 类 可以在应用程序中使用该类 成员属性

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public char

More information

教案模板4-2

教案模板4-2 传智播客 Java 基础入门 教学设计 课程名称 : Java 基础入门 授课年级 : 2014 年级 授课学期 : 2014 学年第一学期 教师姓名 : 某某老师 2014 年 02 月 09 日 课题名称第 3 章面向对象上 计划学时 6 课时 Java 是一种面向对象的语言, 认识面向对象的编程思想对于 Java 学习至关重 内容分析 要 在面向对象中, 有两个重要的概念, 分别是类和对象,

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public char

More information

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx 运算符重载 Operator Overloading class Point { public: ; double x_, y_; Why Operator Overloading? Point (double x =0, double y = 0):x_(x),y_(y) { int main(){ Point a(1., 2), b(3,4); Point c = a + b; return 0;

More information

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式] 用户定义类型 User-defined Datatypes classes and structs 几何向量 (Geometry Vector) 二维平面上的向量由起点和终点构成 每个点包含两个坐标 (x, y), 因此一个向量需要四个实数表示 Start= (0.9,1.5) Start= (0.4,0.8) int main() { double xstart = 0.4; double xend

More information

《计算概论》课程 第十九讲 C 程序设计语言应用

《计算概论》课程 第十九讲  C 程序设计语言应用 Java 高级技术 课程第二讲 Java 语言的面向对象特性 (3) 李戈 北京大学信息科学技术学院软件研究所 2010 年 3 月 21 日 进入一个新的主题 抽象类 vs. 接口 抽象类的引出 抽象类 现实世界中一些没有具体对象的纯粹抽象概念, 例如, 鸟 鱼 灯 树 动物 ; 抽象类用于建模现实世界中的纯粹抽象概念 ; 定义方法 : 使用保留字 abstract public abstract

More information

chp5_1

chp5_1 Java 软件设计基础 5. 继承与多态 类的封装 类的特性 Java 程序设计的基本单位是类, 类是用来创建具体对象的模板, 有以下三个重要特性 : 封装 Java 语言中, 对象就是对一组变量和相关方法的封装 (Encapsulation), 通过对对象的封装, 实现模块化和信息隐藏 通过对类的成员辅以一定的访问限制, 实现类中成员的信息隐藏 继承 继承 (inheritance) 允许创建分等级层次的类,

More information

Microsoft Word - 第2章.doc

Microsoft Word - 第2章.doc 2 第第 2 章 学习第 1 章后, 读者已经对 Java 语言有了初步的了解, 本章将具体解析 Java 类的组成元素 任何一个 Java 类, 都有 5 种基本组成元素 : 属性 方法 构造方法 块和内部类 其中属性 方法 构造方法是使用最多的元素, 而块 内部类使用较少 本章将对各种元素进行学习 Java 类基本结构 2.1 类 类 Java 类的声明形式 访问权限修饰符 修饰符 class

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 语 言 程 序 设 计 郑 莉 胡 家 威 编 著 清 华 大 学 逸 夫 图 书 馆 北 京 内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 握 语

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

Mac Java import com.apple.mrj.*;... public class MyFirstApp extends JFrame implements ActionListener, MRJAboutHandler, MRJQuitHandler {... public MyFirstApp() {... MRJApplicationUtils.registerAboutHandler(this);

More information

Microsoft Word - 第5章.doc

Microsoft Word - 第5章.doc 第 5 课 深入面向对象编程 在面向对象的概念中, 大家可以知道所有的对象都是通过类来描绘的, 但是反过来却不是这样, 并不是所有的类都是用来描绘对象的 如果一个类中没有包含足够的信息来描绘一个具体的对象, 那么这样的类就是抽象类 由于 Java 语言只支持单继承, 那么接口的存在就弥补了单继承的不足 内部类也是嵌套的类, 方法的重载和重写是 Java 语言多态性的不同表现 本课将深入讲解面向对象编程中的这些类和方法的使用以及包的概念

More information

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple halcon 与 C# 混合编程之 Halcon 代码调用 写在前面 完成 halcon 与 C# 混合编程的环境配置后, 进行界面布局设计构思每一个按钮所需要实现 的功能, 将 Halcon 导出的代码复制至相应的 C# 模块下即可 halcon 源程序 : dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image,

More information

拦截器(Interceptor)的学习

拦截器(Interceptor)的学习 二 拦截器 (Interceptor) 的学习 拦截器可以监听程序的一个或所有方法 拦截器对方法调用流提供了细粒度控制 可以在无状态会话 bean 有状态会话 bean 和消息驱动 bean 上使用它们 拦截器可以是同一 bean 类中的方法或是一个外部类 下面介绍如何在 Session Bean 类中使用外部拦截器类 @Interceptors 注释指定一个或多个在外部类中定义的拦截器 下面拦截器

More information

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 JAVA 程 序 设 计 ( 肆 ) 徐 东 / 数 学 系 使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 使 用 Java class 代 表 保 险 箱 public class SaveBox 类 名 类 类 体 实 现 封 装 性 使 用 class SaveBox 代 表 保

More information

public class Phone { String brand; double price; void call(){ System.out.println("hi,how are you doing"); 案例 3-2 对象的创建及对象内存图 1 考核知识点对象的创建和引用 掌握创建对象的方式

public class Phone { String brand; double price; void call(){ System.out.println(hi,how are you doing); 案例 3-2 对象的创建及对象内存图 1 考核知识点对象的创建和引用 掌握创建对象的方式 第三章补充案例 案例 3-1 类的定义 1 考核知识点类的定义 掌握类定义的格式 掌握如何在类中定义成员变量和成员方法 3 需求分析在程序中, 设计一个表示学生的类, 该类具有以下属性和方法 : 该类具有表示姓名的属性 name 该类具有表示年龄的属性 age 该类具有表示说话行为的方法 speak, 并且用于输出学生的姓名和年龄 1) 使用 class 关键字定义一个表示学生类型的类, 类名为 Student

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

chp4

chp4 Java 软件开发基础 4. 面向对象的程序设计基础 4.1 面向对象基础 对象 现实世界中复杂的对象是由许多小的 简单的对象组成的 客观存在的物体就是最基本的对象 不同的物体有共性, 共性存在于个性之中, 物体的个性又继承了共性 对象的状态属性 对象蕴含着许多信息, 可以用一组状态来表征 对象的行为操作 对象内部含有对数据的操作, 即对象的行为操作 某类事物的抽象 某类对象是对现实世界具有共同特性的某类事物的抽象

More information

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题 2009 年 3 月 全 国 计 算 机 等 级 考 试 笔 试 试 卷 二 级 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟, 满 分 100 分 ) 一 选 择 题 ( 每 题 2 分, 共 70 分 ) 下 列 各 题 A) B) C) D) 四 个 选 项 中, 只 有 一 个 选 项 是 正 确 的 请 将 正 确 选 项 填 涂 在 答 题 卡 相 应 位 置 上,

More information

<4D6963726F736F667420506F776572506F696E74202D20B5DA3035D5C220C3E6CFF2B6D4CFF3B8DFBCB6B3CCD0F2C9E8BCC6>

<4D6963726F736F667420506F776572506F696E74202D20B5DA3035D5C220C3E6CFF2B6D4CFF3B8DFBCB6B3CCD0F2C9E8BCC6> Java 程 序 设 计 教 学 课 件 河 南 农 业 大 学 信 管 学 院 计 算 机 系 河 南 农 业 大 学 信 管 学 院 计 算 机 系 高 级 语 言 程 序 设 计 课 程 组 第 5 章 面 向 对 象 高 级 程 序 设 计 主 要 内 容 5.1 继 承 5.2 多 态 性 5.3 抽 象 类 和 抽 象 方 法 5.4 接 口 5.5 内 部 类 和 匿 名 类 5.1

More information

<4D F736F F F696E74202D C DB5DA3131D5C25FBCCCB3D0BACDB6E0CCAC2E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D C DB5DA3131D5C25FBCCCB3D0BACDB6E0CCAC2E BBCE6C8DDC4A3CABD5D> 第 11 章继承和多态 1 动因 假设要定义一个类来对圆 矩形和三角形建模 这些类有 很多共同的特性 设计这些类来避免冗余的最好的方式是 什么? 答案就是使用继承 2 学习目标 通过继承由父类创建子类 ( 第 11.2 节 ) 使用关键字 super 调用父类的构造方法和方法 ( 第 11.3 节 ) 在子类中覆盖实例方法 ( 第 11.4 节 ) 区分覆盖和重载的不同 ( 第 11.5 节 ) 探究

More information

《大话设计模式》第一章

《大话设计模式》第一章 第 1 章 代 码 无 错 就 是 优? 简 单 工 厂 模 式 1.1 面 试 受 挫 小 菜 今 年 计 算 机 专 业 大 四 了, 学 了 不 少 软 件 开 发 方 面 的 东 西, 也 学 着 编 了 些 小 程 序, 踌 躇 满 志, 一 心 要 找 一 个 好 单 位 当 投 递 了 无 数 份 简 历 后, 终 于 收 到 了 一 个 单 位 的 面 试 通 知, 小 菜 欣 喜

More information

Microsoft Word - 第5章.doc

Microsoft Word - 第5章.doc 上机实践 5 子类与继承 实验 1 中国人 北京人和美国人 1 相关知识点 由继承而得到的类称为子类, 被继承的类称为父类 ( 超类 ),Java 不支持多重继承, 即子类只能有一个父类 人们习惯地称子类与父类的关系是 is-a 关系 如果子类和父类在同一个包中, 那么, 子类自然地继承了其父类中不是 private 的成员变量作为自己的成员变量, 并且也自然地继承了父类中不是 private 的方法作为自己的方法,

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 第十一讲 运算符重载 与类型转换 运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2 为什么要运算符重载 预定义的运算符只针对基本数据类型, 若要对类的对象进行类似的运算, 需要重新定义运算符的功能 运算符重载实质就是函数重载 : 对已有的运算符赋予多重含义, 使得同一个运算符作用于不同类型的数据时导致不同的行为

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

幻灯片 1

幻灯片 1 信息科学技术学院 程序设计实习 郭炜微博 http://weibo.com/guoweiofpku http://blog.sina.com.cn/u/3266490431 刘家瑛微博 http://weibo.com/pkuliujiaying 1 信息科学技术学院 程序设计实习 郭炜刘家瑛 继承和派生 ( 教材 P215) 2 继承和派生的概念 继承 : 在定义一个新的类 B 时, 如果该类与某个已有的类

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 求职者在介绍自己的基本情况时不必 从头说起, 比如, 不必介绍自己所具有的人的一般属性等, 因为人们已经知道求职者肯定是一个人, 已经具有了人的一般属性, 求职者只要介绍自己独有的属性就可以了 当准备编写一个类的时候, 发现某个类有我们所需要的成员变量和方法, 如果想复用这个类中的成员变量和方法, 即在所编写的类中不用声明成员变量就相当有了这个成员变量, 不用定义方法就相当有了这个方法,

More information

Microsoft PowerPoint - 04-Inheritance.ppt

Microsoft PowerPoint - 04-Inheritance.ppt 继承 派生与多态性 1 本章主要内容 类的继承与派生 类成员的访问控制 简单继承与多重继承 派生类的构造 析构函数 多态性 2 1 类的继承与派生 保持已有类的特性, 并在其基础上产生新的类, 称新类继承了已有类的特征, 或称已有类派生出新类 被继承的已有类称为基类 ( 或父类 ) 派生出的新类称为派生类 派生类将自动继承基类的所有特性 ( 属性和方法 ) 派生类可以定义新的特性 ( 属性和方法 )

More information

工程项目进度管理 西北工业大学管理学院 黄柯鑫博士 甘特图 A B C D E F G 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 甘特图的优点 : 直观明了 ( 图形化概要 ); 简单易懂 ( 易于理解 ); 应用广泛 ( 技术通用 ) 甘特图的缺点 : 不能清晰表示活动间的逻辑关系 WBS 责任分配矩阵 ( 负责〇审批

More information

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat 本章学习目标 小风 Java 实战系列教程 AOP 思想概述 AOP 底层技术实现 AOP 术语介绍 SpringAOP 的 XML 方式 HelloWorld SpringAOP 的 XML 方式配置细节 SpringAOP 的注解方式 SpringAOP 的零配置方式 1. AOP 思想概述 1.1. AOP 思想简介 1.2. AOP 的作用 2. AOP 底层技术实现 小风 Java 实战系列教程

More information

器之 间 向一致时为正 相反时则为负 ③大量电荷的定向移动形成电 流 单个电荷的定向移动同样形成电流 3 电势与电势差 1 陈述概念 电场中某点处 电荷的电势能 E p 与电荷量 q Ep 的比值叫做该点处的电势 表达式为 V 电场中两点之间的 q 电势之差叫做电势差 表达式为 UAB V A VB 2 理解概念 电势差是电场中任意两点之间的电势之差 与参考点的选择无关 电势是反映电场能的性质的物理量

More information

三种方法实现Hadoop(MapReduce)全局排序(1)

三种方法实现Hadoop(MapReduce)全局排序(1) 三种方法实现 Hadoop(MapReduce) 全局排序 () 三种方法实现 Hadoop(MapReduce) 全局排序 () 我们可能会有些需求要求 MapReduce 的输出全局有序, 这里说的有序是指 Key 全局有序 但是我们知道,MapReduce 默认只是保证同一个分区内的 Key 是有序的, 但是不保证全局有序 基于此, 本文提供三种方法来对 MapReduce 的输出进行全局排序

More information

Volume 2.Number 5.2007 Volume 2.Number 5.2007 Volume 2.Number 5.2007 Volume 2.Number 5.2007 Volume 2.Number 5.2007 Volume 2.Number 5.2007 Volume 2.Number 5.2007 Volume 2.Number 5.2007 Volume 2.Number

More information

欢迎访问动力节点官方网站,动力节点java0基础免费学习半个月,java就业班免费学习一个月,满意后再交学费,请稊等,正在为您接入咨询老师

欢迎访问动力节点官方网站,动力节点java0基础免费学习半个月,java就业班免费学习一个月,满意后再交学费,请稊等,正在为您接入咨询老师 JDK 中的设计模式应用实例在 JDK(Java Development Kit) 类库中, 开发人员使用了大量设计模式, 正因为如此, 我们可以在不修改 JDK 源码的前提下开发出自己的应用软件, 本文列出了部分 JDK 中的模式应用实例, 有兴趣的同学可以深入研究, 看看前 Sun 公司的开发人员是如何在实际框架开发中运用设计模式的,Sunny 认为, 研究 JDK 类库中的模式实例也不失为学习如何使用设计模式的一个好方式.

More information

Strings

Strings Polymorphism and Virtual Functions Cheng-Chin Chiang Virtual Function Basics 多 型 (Polymorphism) 賦 予 一 個 函 數 多 種 意 涵, 存 在 於 同 一 類 別 之 內 祖 先 類 別 與 後 代 類 別 間 物 件 導 向 程 式 設 計 基 本 原 理 虛 擬 函 數 (Virtual Function)

More information

PowerPoint Template

PowerPoint Template 第五章类和继承 主要内容提要 创建类 管理继承 实现嵌套的类 创建类 声明类 基本语法 : class { [] [] [] 上面的语法中, 关键字 class 和 class_name 是必须的, 其它都是可选的 类的声明

More information

0 本章掌握内容 C# 是一门语言 Framework 是运行库和类库 Visual Studio.NET 是开发环境 / 工具 VS2010 的使用 ( 程序 debug) C# 应用程序一般结构 控制台应用程序 窗体应用程序

0 本章掌握内容 C# 是一门语言 Framework 是运行库和类库 Visual Studio.NET 是开发环境 / 工具 VS2010 的使用 ( 程序 debug) C# 应用程序一般结构 控制台应用程序 窗体应用程序 软件开发基础 (.NET.NET) 1. C# 概述 林毅申 sunsoftware@qq.com 信息学院 计算机科学与工程系 软件工程教研室 505 0 本章掌握内容 C# 是一门语言 Framework 是运行库和类库 Visual Studio.NET 是开发环境 / 工具 VS2010 的使用 ( 程序 debug) C# 应用程序一般结构 控制台应用程序 窗体应用程序 一 C# 及相关概述

More information

c_cpp

c_cpp C C++ C C++ C++ (object oriented) C C++.cpp C C++ C C++ : for (int i=0;i

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

The Embedded computing platform

The Embedded computing platform 嵌入式系統及實驗 Embedded System and Experiment 詹曉龍 長庚大學電機系 Java 的類別與物件 : 宣告類別 建構子 public class Customer { private String name; private String address; // Customer 類別宣告 // 成員資料 public int age; // 建構子 : 使用參數設定成員資料初始值

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc CHAPTER3 面向对象程序设计 第 3 章 Java 语言是一种面向对象的高级程序语言 应用面向对象语言求解问题的基本思路是, 首先分析问题并建立相应的对象, 然后通过这些对象以及它们之间的配合解决问题, 其中每个对象在计算机中占用一定的内存, 同时能够完成一定的功能 这种基本思想实际上是模拟现实生活求解问题的一般过程 在现实生活中, 任何一个人或任何一种物体都可以被认为是对象 例如, 人一般拥有手

More information

3.1 num = 3 ch = 'C' 2

3.1 num = 3 ch = 'C' 2 Java 1 3.1 num = 3 ch = 'C' 2 final 3.1 final : final final double PI=3.1415926; 3 3.2 4 int 3.2 (long int) (int) (short int) (byte) short sum; // sum 5 3.2 Java int long num=32967359818l; C:\java\app3_2.java:6:

More information

PowerPoint Presentation

PowerPoint Presentation 第 3 章 类 类的继承和接口 3.1 类 3.2 包的创建和使用 源文件结构 3.3 类的继承和多态 3.4 接口和接口的实现 3.5 内部类和匿名内部类 3.1 类 1 Java 中类的定义格式 : [ 类的修饰符 ] class 类名 [extends 父类名 ]{ 变量声明 ; 构造方法定义 ; 其他方法定义 ; 2 创建一个类的对象的格式 : 类名对象名 =new 构造函数 ( 实际参数

More information

授课内容 内容 备注 第 4 章接口 内部类和 Java API 基础内容和要求 : 1. 理解接口的作用, 理解接口和实现接口的类的关系, 掌握声明接口 重点 : 接口和实现接口的一个类实现多个接口的声明和使用方法 类 ;Java API 2. 理解内嵌类型的概念, 掌握声明内部类的方法 难点 :

授课内容 内容 备注 第 4 章接口 内部类和 Java API 基础内容和要求 : 1. 理解接口的作用, 理解接口和实现接口的类的关系, 掌握声明接口 重点 : 接口和实现接口的一个类实现多个接口的声明和使用方法 类 ;Java API 2. 理解内嵌类型的概念, 掌握声明内部类的方法 难点 : 金陵科技学院教案 第 7 次课授课学时 2 教案完成时间 : 2014.2 章 节 第四章接口 内部类和 Java API 基础 4-1 接口与实现接口的类 4-2 内部类和内部接口 4-3 Java API 基础 4-4 泛型 ( 简单介绍, 不深入学习 ) 1. 接口与实现接口的类 主要内容 2. 内部类和内部接口 3. Java API 基础 目的与要求 1. 理解接口的作用, 理解接口和实现接口的类的关系,

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

Microsoft Word - ch04三校.doc

Microsoft Word - ch04三校.doc 4-1 4-1-1 (Object) (State) (Behavior) ( ) ( ) ( method) ( properties) ( functions) 4-2 4-1-2 (Message) ( ) ( ) ( ) A B A ( ) ( ) ( YourCar) ( changegear) ( lowergear) 4-1-3 (Class) (Blueprint) 4-3 changegear

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

设计模式 Design Patterns

设计模式 Design Patterns 丁勇 Email:18442056@QQ.com 组件技术概述 现在软件开发都已经转向了基于组件的开发, 目前具备代表性的组件技术有微软的 COM COM+, 有 Sun 的 Bean 和 EJB(Enterprise Bean), 另外还有 CORBA(Common Object Request Broker Architecture, 公 共对象请求代理结构 ) Bean Bean 规范将 软件组件

More information

<4D F736F F F696E74202D20B5DA39D5C220C3E6CFF2B6D4CFF3D3EFD1D4B5C4B1E0D2EB2E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D20B5DA39D5C220C3E6CFF2B6D4CFF3D3EFD1D4B5C4B1E0D2EB2E BBCE6C8DDC4A3CABD5D> 第 9 章 面向对象语言的编译 本章内容 概述面向对象语言的重要概念和实现技术 以 C++ 语言为例, 介绍如何将 C++ 程序翻译 成 C 程序 实际的编译器大都把 C++ 程序直接翻译成低 级语言程序 91 9.1 面向对象语言的概念 9.1.1 对象和对象类 对象 由一组属性和操作于这组属性的过程组成 属性到值的映射称为对象的状态, 过程称为方法 对象类 一类对象的总称, 规范了该类中对象的属性和方法,

More information

附录J:Eclipse教程

附录J:Eclipse教程 附 录 J:Eclipse 教 程 By Y.Daniel Liang 该 帮 助 文 档 包 括 以 下 内 容 : Eclipse 入 门 选 择 透 视 图 创 建 项 目 创 建 Java 程 序 编 译 和 运 行 Java 程 序 从 命 令 行 运 行 Java Application 在 Eclipse 中 调 试 提 示 : 在 学 习 完 第 一 章 后 使 用 本 教 程 第

More information

第1章 Delphi简介

第1章  Delphi简介 第 3 章 Java 面向对象编程机制 Java 核心技术 计算机程序告诉计算机应该做什么 计算机执行的任何操作都是由程序控制的 程序设计是将计算机要执行的操作或者计算机要解决的问题转变成程序的过程 程序设计的过程主要分为面向过程编程和面向对象编程两种风格, 本书讲解的 Java 语言编程属于面向对象编程技术 本章要点 面向对象编程的基本思想 类与对象 抽象类与接口 Java 简单程序 学习目标 理解面向对象编程的基本思想

More information

Microsoft Word - JCS5.doc

Microsoft Word - JCS5.doc 第 5 章进一步讨论对象和类 5.1 抽象数据类型 5.1.1 概述 绝大多数程序设计语言都预定义了一些基本数据类型, 并相应定义了对那些类型的实例执行的操作 比如, 对整型 实型等数值类型, 有加 减 乘 除等操作 ; 对逻辑类型, 有逻辑与 逻辑或 逻辑非等操作 对于用户自定义的复合数据类型, 需要由程序员自己定义一些方法, 对该类型的实例进行所需的操作 在早期许多程序设计语言中, 复合数据类型及其相关操作的代码之间没有特殊的联系

More information

untitled

untitled 1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 ives.net@gmail.com www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立

More information

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B 25 9 2008 9 M ICROEL ECTRON ICS & COMPU TER Vol. 25 No. 9 September 2008 J ava 1,2, 1,2, 1,2 (1, 330022 ; 2, 330022) :,. Apla - Java,,.. : PAR ;Apla - Java ; ;CMP ; : TP311 : A : 1000-7180 (2008) 09-0018

More information

<4D F736F F D204A617661B3CCD0F2C9E8BCC6CFB0CCE2D3EBCAB5D1B5BDCCB3CC20B5DA33D5C22E646F63>

<4D F736F F D204A617661B3CCD0F2C9E8BCC6CFB0CCE2D3EBCAB5D1B5BDCCB3CC20B5DA33D5C22E646F63> 第 3 章 类与对象 3.1 基本知识提要 3.1.1 知识结构图 类 对象 构造方法 : 构造方法重载类的定义成员方法 : 方法重载成员变量派生子类类的继承方法覆盖 super 的使用对象的声明对象的创建对象的使用 类与对象 this 的使用访问控制修饰符 : 类的访问控制修饰符 成员的访问控制修饰符 非访问控制修饰符 :static final abstract 包 : 包的定义与使用 静态导入

More information

尽 管 Java 语 言 是 在 C++ 语 言 基 础 上 发 展 起 来 的, 但 与 C++ 不 同,Java 是 一 种 纯 粹 的 面 向 对 象 语 言 (Object-oriented language) 在 Java 世 界 中, 所 有 事 物 都 是 Object 1. 通 过

尽 管 Java 语 言 是 在 C++ 语 言 基 础 上 发 展 起 来 的, 但 与 C++ 不 同,Java 是 一 种 纯 粹 的 面 向 对 象 语 言 (Object-oriented language) 在 Java 世 界 中, 所 有 事 物 都 是 Object 1. 通 过 玩 转 Object 不 理 解, 就 无 法 真 正 拥 有 歌 德 按 其 实 而 审 其 名, 以 求 其 情 ; 听 其 言 而 查 其 累, 无 使 放 悖 ( 根 据 实 际 明 辨 名 称, 以 便 求 得 真 实 情 况 ; 听 取 言 辞 后 弄 明 它 的 类 别, 不 让 它 混 淆 错 乱 ) 三 玩 转 Object 大 围 山 人 玩 转 Object...1 1. 通

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information

Microsoft PowerPoint - L17_Inheritance_v4.pptx

Microsoft PowerPoint - L17_Inheritance_v4.pptx C++ Programming Lecture 17 Wei Liu ( 刘 威 ) Dept. of Electronics and Information Eng. Huazhong University of Science and Technology May. 2015 Lecture 17 Chapter 20. Object-Oriented Programming: Inheritance

More information

OOP with Java 通知 Project 7, 6 月 14 日晚 9 点 本周四上机课正常进行 答疑 本周三, 周五下午 1:00 3:00, 理科楼 B911 6 月 12 日考试 ( 随堂 ) 下午 1:00-3:00 教书院 218

OOP with Java 通知 Project 7, 6 月 14 日晚 9 点 本周四上机课正常进行 答疑 本周三, 周五下午 1:00 3:00, 理科楼 B911 6 月 12 日考试 ( 随堂 ) 下午 1:00-3:00 教书院 218 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 7, 6 月 14 日晚 9 点 本周四上机课正常进行 答疑 本周三, 周五下午 1:00 3:00, 理科楼 B911 6 月 12 日考试 ( 随堂 ) 下午 1:00-3:00 教书院 218 OOP with Java 题目类型 : 选择 : 30% 问答 : 30% 编程 :

More information

尽 管 Java 语 言 是 在 C++ 语 言 基 础 上 发 展 起 来 的, 但 是 有 别 于 C++,Java 是 一 种 纯 粹 的 面 向 对 象 语 言 (Object-oriented language) 在 像 Java 这 样 纯 粹 的 面 向 对 象 语 言 中, 所 有

尽 管 Java 语 言 是 在 C++ 语 言 基 础 上 发 展 起 来 的, 但 是 有 别 于 C++,Java 是 一 种 纯 粹 的 面 向 对 象 语 言 (Object-oriented language) 在 像 Java 这 样 纯 粹 的 面 向 对 象 语 言 中, 所 有 玩 转 Object 不 理 解, 就 无 法 真 正 拥 有 歌 德 按 其 实 而 审 其 名, 以 求 其 情 ; 听 其 言 而 查 其 累, 无 使 放 悖 ( 根 据 实 际 明 辨 名 称, 以 便 求 得 真 实 情 况 ; 听 取 言 辞 后 弄 明 它 的 类 别, 不 让 它 混 淆 错 乱 ) 三 玩 转 Object 大 围 山 人 玩 转 Object...1 1. 通

More information

Hive:用Java代码通过JDBC连接Hiveserver

Hive:用Java代码通过JDBC连接Hiveserver Hive: 用 Java 代码通过 JDBC 连接 Hiveserver 我们可以通过 CLI Client Web UI 等 Hive 提供的用户接口来和 Hive 通信, 但这三种方式最常用的是 CLI;Client 是 Hive 的客户端, 用户连接至 Hive Server 在启动 Client 模式的时候, 需要指出 Hive Server 所在节点, 并且在该节点启动 Hive Server

More information

¼ ½ ¾ ¼ ½ ¾

¼ ½ ¾ ¼ ½ ¾ 回归传统 历史学视野中的资本主义 刘光临 虽然明清资本主义萌芽研究和西方现代史学都使用了资本主义一词 但双方并无相同的理论背景 资本主义作为一个成熟的学科概念是由 世纪末 世纪初的历史学家和强调历史面向的政治经济学家 可简称为 德国历史学派 一起创造出来的 强调从历史而不是从抽象的理论中寻求社会变化的原因 资本主义萌芽这一概念的启用 实际上是对欧洲近代历史的严重误读 有鉴于此 在今后的中国历史研究中应该用资本主义来取代资本主义萌芽

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj Message Transition 5-1 5-2 DataInputStream Class 5-3 DataOutputStream Class 5-4 PrintStream Class 5-5 (Message Transition) (Exercises) Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream

More information

<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF> 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 考 试 2009 年 上 半 年 软 件 设 计 师 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 请 按 下 述 要 求 正 确 填 写 答 题 纸 1. 在 答 题 纸 的 指 定 位 置 填 写 你 所 在 的 省 自 治 区 直 辖 市 计 划 单 列 市 的 名 称 2. 在 答

More information

untitled

untitled 4.1AOP AOP Aspect-oriented programming AOP 來說 AOP 令 理 Cross-cutting concerns Aspect Weave 理 Spring AOP 來 AOP 念 4.1.1 理 AOP AOP 見 例 來 例 錄 Logging 錄 便 來 例 行 留 錄 import java.util.logging.*; public class HelloSpeaker

More information

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式]

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式] 函数 Function 如何重用代码 How to reuse code 3 4 = 3*3*3*3 3 4,6 5 : 拷贝 - 粘帖代码 (Copy-paste code) 3 4,6 5,12 10 : 拷贝 - 粘帖代码 (Copy-paste code) Bad! 使用函数 (with a function) 使用函数 (with a function) 使用函数 (with a function)

More information

教学内容 1 2 类和对象 Java 面向对象特性

教学内容 1 2 类和对象 Java 面向对象特性 2013-2014 学年度第二学期课程 C 语言程序设计 Java 语言程序设计面向过程编程方法 编程方法学 新疆农业大学计算机与信息工程学院 陈燕红 :cyh@xjau.edu.cn 教学内容 1 2 类和对象 Java 面向对象特性 3 4 5 6 Java 程序的执行过程 经典的 Java 工具包是 JDK 可以用任何文本编辑器, 如记事本, 都可以直接编写 Java 程序然后用 JDK 的命令编译和运行.

More information

Microsoft Word - 物件導向編程精要.doc

Microsoft Word - 物件導向編程精要.doc Essential Object-Oriented Programming Josh Ko 2007.03.11 object-oriented programming C++ Java OO class object OOP Ruby duck typing complexity abstraction paradigm objects objects model object-oriented

More information

全国计算机技术与软件专业技术资格(水平)考试

全国计算机技术与软件专业技术资格(水平)考试 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2008 年 上 半 年 程 序 员 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 ) 试 题 一 ( 共 15 分 ) 阅 读 以 下 说 明 和 流 程 图, 填 补 流 程 图 中 的 空 缺 (1)~(9), 将 解 答 填 入 答 题 纸 的 对 应 栏 内 [ 说 明

More information

Java 1 Java String Date

Java 1 Java String Date JAVA SCJP Java 1 Java String Date 1Java 01 Java Java 1995 Java Java 21 Java Java 5 1-1 Java Java 1990 12 Patrick Naughton C++ C (Application Programming Interface API Library) Patrick Naughton NeXT Stealth

More information

// 获取并集 // set1.addall(set2); // 获取交集 set1.retainall(set2); // 打印操作结果 set1.foreach(o -> System.out.println(o)); 运行结果如图 6-1 所示 图 6-1 运行结果 三 案例总结 1 Coll

// 获取并集 // set1.addall(set2); // 获取交集 set1.retainall(set2); // 打印操作结果 set1.foreach(o -> System.out.println(o)); 运行结果如图 6-1 所示 图 6-1 运行结果 三 案例总结 1 Coll 第 6 章集合 案例 6-1 Collection 单列集合的操作 一 案例描述 1 考核知识点编号 :063006002~063006008 063006018 名称 :Collection 单列集合 Arrays 工具类 2 练习目标 掌握 Collection 单列集合方法的使用 3 需求分析 Collection 是所有单列集合的根接口, 在 Collection 中定义了单列集合 (List

More information

Microsoft Word - 投影片ch11

Microsoft Word - 投影片ch11 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十一章抽象類別與介面 本章學習目標認識抽象類別學習介面的使用認識多重繼承與介面的延伸 抽象類別與介面 11-2 11.1 抽象類別 抽象類別的目的是要依據它的格式來修改並建立新的類別 11.1.1 定義抽象類別 定義抽象類別的語法如下 : abstract class 類別名稱 { 宣告資料成員 ; // 定義抽象類別

More information

Microsoft PowerPoint - 第06讲_继承.ppt [兼容模式]

Microsoft PowerPoint - 第06讲_继承.ppt [兼容模式] 程序设计实习 (I): C++ 程序设计 第六讲继承 上节内容回顾 三种运算符重载的实现方式 重载为普通函数 重载为成员函数 重载为友元 常见的运算符重载 流运算符 (>>

More information

(6) 要 求 付 款 管 理 员 从 预 订 表 中 查 询 距 预 订 的 会 议 时 间 两 周 内 的 预 定, 根 据 客 户 记 录 给 满 足 条 件 的 客 户 发 送 支 付 余 款 要 求 (7) 支 付 余 款 管 理 员 收 到 客 户 余 款 支 付 的 通 知 后, 检

(6) 要 求 付 款 管 理 员 从 预 订 表 中 查 询 距 预 订 的 会 议 时 间 两 周 内 的 预 定, 根 据 客 户 记 录 给 满 足 条 件 的 客 户 发 送 支 付 余 款 要 求 (7) 支 付 余 款 管 理 员 收 到 客 户 余 款 支 付 的 通 知 后, 检 2016 年 上 半 年 软 件 设 计 师 考 试 真 题 ( 下 午 题 ) 下 午 试 题 试 题 一 ( 共 15 分 ) 阅 读 下 列 说 明 和 图, 回 答 问 题 1 至 问 题 4, 将 解 答 填 入 答 题 纸 的 对 应 栏 内 说 明 某 会 议 中 心 提 供 举 办 会 议 的 场 地 设 施 和 各 种 设 备, 供 公 司 与 各 类 组 织 机 构 租 用 场

More information

北 风 网 讲 师 原 创 作 品 ---- 仅 供 学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见

北 风 网 讲 师 原 创 作 品 ---- 仅 供  学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见 北 风 网 讲 师 原 创 作 品 ---- 仅 供 www.ibeifeng.com 学 员 内 部 交 流 使 用 前 言 吾 尝 终 日 而 思 矣, 不 如 须 臾 之 所 学 也 ; 吾 尝 跂 而 望 矣, 不 如 登 高 之 博 见 也 登 高 而 招, 臂 非 加 长 也, 而 见 者 远 ; 顺 风 而 呼, 声 非 加 疾 也, 而 闻 者 彰 假 舆 马 者, 非 利 足 也,

More information

Microsoft PowerPoint - plan08.ppt

Microsoft PowerPoint - plan08.ppt 程 序 设 计 语 言 原 理 Principle of Programming Languages 裘 宗 燕 北 京 大 学 数 学 学 院 2012.2~2012.6 8. 面 向 对 象 为 什 么 需 要 面 向 对 象? OO 语 言 的 发 展 面 向 对 象 的 基 本 概 念 封 装 和 继 承 初 始 化 和 终 结 处 理 动 态 方 法 约 束 多 重 继 承 总 结 2012

More information

<4D F736F F F696E74202D20B8DFBCB6D3C3BBA7BDE7C3E6D3EBB6E0CFDFB3CC2E707074>

<4D F736F F F696E74202D20B8DFBCB6D3C3BBA7BDE7C3E6D3EBB6E0CFDFB3CC2E707074> 高级用户界面与多线程 LCDUI 高级 LCDUI LCDUI 与多线程 多线程在手机编程中尤为重要 手机游戏开发中, 通常由游戏主线程负责游戏的基本控制, 除此之外还会由一个或者多个线程用于播放背景音乐或声效 网络接受数据时, 传输速度通常都比较慢, 因此可以使用一个独立的线程负责接收数据, 另外一个线程负责 UI 界面和与用户的交互 LCDUI 与多线程 J2ME 是通过线程体来实现多线程的 线程体就是用于实现线程活动的主体,

More information

2

2 学习要求 (1) (2) (3) 内容简述 1 2 3 利率的计算 10 r 10% 100 110 110% 121 100 1 10% 2 4 121110% 13310 100 1 10% 3 n FV P0 1 r (11.12 10) (1 12%) 1 (1 12%) n1 (1 r) 1 S P[ 1] r 5 1 r FV A[ r n 1 ] 110 100 1 10% 100 100

More information

《Java高级技术》课程 第一讲 C 程序设计语言应用

《Java高级技术》课程 第一讲  C 程序设计语言应用 关于 Java 的参数传递请给出以下程序的输出结果 : public class ClassOne { public static void reverse(string str) { //String temp = ""; for (int index = str.length() 1; index >= 0; index--) { temp = temp + str.charat(index);

More information

Chapter12 Derived Classes

Chapter12   Derived Classes 继 承 -- 派 生 类 复 习 1. 有 下 面 类 的 说 明, 有 错 误 的 语 句 是 : class X { A) const int a; B) X(); C) X(int val) {a=2 D) ~X(); 答 案 :C 不 正 确, 应 改 成 X(int val) : a(2) { 2. 下 列 静 态 数 据 成 员 的 特 性 中, 错 误 的 是 A) 说 明 静 态 数

More information

基于CDIO一体化理念的课程教学大纲设计

基于CDIO一体化理念的课程教学大纲设计 Java 语 言 程 序 设 计 课 程 教 学 大 纲 Java 语 言 程 序 设 计 课 程 教 学 大 纲 一 课 程 基 本 信 息 1. 课 程 代 码 :52001CC022 2. 课 程 名 称 :Java 语 言 程 序 设 计 3. 课 程 英 文 名 称 :Java Programming 4. 课 程 类 别 : 理 论 课 ( 含 实 验 上 机 或 实 践 ) 5. 授

More information

Microsoft PowerPoint - CPP-Ch Print.ppt [兼容模式]

Microsoft PowerPoint - CPP-Ch Print.ppt [兼容模式] Chapter 13 Object-Oriented Programming: Polymorphism http://jssec.seu.edu.cn 杨明 yangming2002@seu.edu.cn OBJECTIVES What polymorphism( 多态 ) is, how it makes programming more convenient, and how it makes

More information