继承性 2、继承 为什么会有继承? 父类和子类,子类继承(拥有)父类所有的数据和方法,同时子类可以有新的数据和方法,“青出于蓝,而胜于蓝”

Slides:



Advertisements
Similar presentations
面向侧面的程序设计 方林博士 本文下载地址:
Advertisements

第四章 类、对象和接口.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
项目6 通用堆栈.
四資二甲 第三週作業 物件導向程式設計.
Exception子类的继承关系 Exception ClassNotFoundException
程設一.
第二章 JAVA语言基础.
Ch07 介面與多重繼承 物件導向程式設計(II).
第五章 Java面向对象编程基础 类:现实世界中实体的抽象集合。 5.1定义类 定义类的过程就是定义类的属性和服务的过程;
第14章 c++中的代码重用.
第10讲 Java面向对象编程基础(4) 教学目标 主要内容.
JAVA程序设计 (03) JAVA Programming
程設一.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
例外處理(Exception Handling)
Java基础 JavaSE异常.
第七章 异常.
抽象类/接口 与异常处理机制 主讲:赖国荣 QQ:
Classes Lecturer: 曾學文.
第六章 类的扩展与继承.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
第 14 章 例外處理.
Java语言程序设计 第五部分 Java异常处理.
第6章 异常的捕获及处理 6.1 异常简介 6.2 异常类的继承结构 6.3 异常处理机制 6.4 异常处理 6.5 本章小结.
Java习题解析.
Java程序设计 第9章 继承和多态.
辅导课程六.
類別的繼承 Vehicle Car.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
异常及处理.
Java程序设计 第2章 基本数据类型及操作.
C/C++/Java 哪些值不是头等程序对象
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第七章 操作符重载 胡昊 南京大学计算机系软件所.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
$9 泛型基础.
第7章 异常处理.
Aspect Oriented Programming
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
本节内容 类成员的访问控制 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 Java语法基础.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
辅导课程十五.
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
Java程序设计 第17章 异常和断言.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
3.7 Java的异常处理机制.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第4讲 类和对象、异常处理 ggao.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第二章 Java基础语法 北京传智播客教育
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

继承性 2、继承 为什么会有继承? 父类和子类,子类继承(拥有)父类所有的数据和方法,同时子类可以有新的数据和方法,“青出于蓝,而胜于蓝” 建立一个类后,发现另一个新的类有相同的特性,两个选择:重新定义一个新的类;在已有类的基础上,修改(加加/减减) 父类和子类,子类继承(拥有)父类所有的数据和方法,同时子类可以有新的数据和方法,“青出于蓝,而胜于蓝” 树型结构(层次化结构) 根(基类)

Case Study :Beetle.java 初始化和类的装载 Case Study :Beetle.java 输出: static Insect.x1 initialized static Beetle.x2 initialized Beetle constructor i = 9, j = 0 Beetle.k initialized k = 63 j = 39

3、多态性 表现在继承中方法的重写 子类从父类继承(extends扩展)而来 多个子类同属一个父类,所有子类有相同的父类 继承父类的方法 在不同的子类中有不同的表现形式

3、多态性在继承中的表现

3 多态 3.1 覆盖 3.2 向上类型转换 3.3 绑定 早绑定 vs 晚绑定 静态联编 vs 动态联编

3.1 覆盖Override 定义:子类的方法覆盖了父类的方法 相同的方法签名 方法名称 输入参数表

多态 什么是多态? 多态(Polymorphism),即多种状态,指程序运行时,依据对象所属 类,引发对应类的方法,从而有不同的行为 实现机制 多态的由向上类型转换和动态绑定机制结合完成

3.2 向上转型

Case Study: Shapes.java Method call binding 早绑定 vs. 晚绑定(动态/运行时刻) Case Study: Shapes.java Java中所有的绑定都是晚绑定,除了final的方法.

final : This cannot be changed final for data final for methods final for a class

Case Study: FinalData.java 只能被赋值一次的变量 Case Study: FinalData.java

有两种 final 方法: private is final. 在方法上加一把锁,防止继承者改变它的意义。 Final methods 有两种 final 方法: 在方法上加一把锁,防止继承者改变它的意义。 编译器把对该方法的调用变成 inline 调用。 private is final.

Final classes是不允许被继承的。 试讨论:  Final fields in a final class?  Final methods in a final class?

一个类的作用仅仅是表达接口,而不是具体的实现细节 抽象的方法是不完全的,它只是一个申明,没有方法体. 抽象类和抽象方法 一个类的作用仅仅是表达接口,而不是具体的实现细节 抽象的方法是不完全的,它只是一个申明,没有方法体. 包含一个抽象方法的类被称作抽象类,抽象类必须要用abstract声明. 不能制造抽象类的对象. 从抽象类继承的类必须override所有的抽象方法,否则它自己成为一个抽象类. 可以申明一个抽象类但是里面没有一个抽象方法. Case : Shapes2.java

抽象类与接口

接口中的方法都是未实现的(类似于抽象方法),目的是在实现接口的类之间建立一种协议 接口中的变量都是常量 定义 接口是对abstract类的进一步扩展 接口中的方法都是未实现的(类似于抽象方法),目的是在实现接口的类之间建立一种协议 接口中的变量都是常量 定义 一个类符合某个或一组接口,利用implements class 类名 implements 接口1, 接口2 …… { … … … } [public] interface 接口名 { 成员变量; 方法声明; }

实现interface的类,其interface中所有的方法必须被“实现”,否则这个类成为一个抽象类。 An class implements an interface to have the interface. 实现interface的类,其interface中所有的方法必须被“实现”,否则这个类成为一个抽象类。 所有实现interface中的方法必须被申明为public. Interface可以从多个interface得到继承,但是不能继承类. 一个类可以实现多个interface.

但在实现接口方法的类中,修饰符为public 4、接口方法 interface Figure { double half=0.5,pi=3.14159; void parameter(); void area(); } class Circle implements Figure { double x, y, r; Circle(double u, double v, double m) { x=u; y=v; r=m; } public void parameter() { System.out.println(x+“ “+y+“ “+r); } public void area() { System.out.println(pi*r*r); } } 无修饰 但在实现接口方法的类中,修饰符为public class Triangle implements Figure { double b, h; Triangle (double u, double v) { b = u; h = v; } public void parameter() { System.out.println(b + “ “ + h); public void area() { System.out.println(half*h*b); } Triangle t = new Triangle(2, 3); Circle c = new Circle(4, 5, 6); Figure[] f = {t, c}; for (int i =0; i < f.length; i++) { f[i].parameter(); f[i].area(); }

练习 1、关于被私有访问控制符private修饰的成员变量,以下说法正确的是 (B)可以被两种类访问和引用:该类本身、该类的所有子类 (C)只能被该类自身所访问和修改 (D)只能被同一个包中的类访问 2、下列代码是否存在问题? public class Test { long a[] = new long[10]; public static void main ( String arg[] ) System.out.println ( a[6] ); }

练习 3、下面哪个函数是public void example(){...}的重载函数( ) (A)public double example2(int m){...} (B)public int example(){...} (C)public void example2(){...} (D)public int example ( int m, float f){...} 4、抽象方法必须在抽象类中,所以抽象类中的方法都必须是抽象方法? 5、一个Java类可以有多个父类? 6、接口里的方法必须全部都声明成abstract? 7、最终类不能派生子类,最终方法不能被重载? 8、在Java程序中,通过类的定义只能实现__________重继承,但通过接口的定义可以实现_________重继承关系。 9、______方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类或接口之中定义。______方法是不能被当前类的子类重新定义的方法。

练习 10、写出执行结果

练习 11、设计一java个程序,表达三种读物:小说、杂志、课本,每种读物有相同的属性,如页数、价格等,针对相同的属性建立一个父类,也有不同的属性,如杂志都有出版周期,而课本有适合对象(读者)。写一个测试类的main()来产生一些列随机的读物,并输出它们的信息(使用多态,参考课本程序)。

2018/12/3 Java语言程序设计-安全与异常 教师:段鹏飞

本章内容 异常 异常机制 异常声明 运行时刻系统异常

在进行程序设计时,错误的产生是不可避免的 如何处理错误? 把错误交给谁去处理? 程序又该如何从错误中恢复? 异常的概念 在进行程序设计时,错误的产生是不可避免的 如何处理错误? 把错误交给谁去处理? 程序又该如何从错误中恢复? 这是任何程序设计语言都要解决的问题

! OS 什么是异常? 在运行时发生的错误 异常情况 public class ExceptionRaised { public ExceptionRaised() { } public int calculate( int operand1, int operand2) { int result = operand1 / operand2; return result; public static void main(String[] args) { ExceptionRaised obj = new ExceptionRaised(); int result = obj.calculate(9, 0); System.out.println(result); 异常情况 ! 异 常 程序突然终止并将控制交给操作系统 OS

异常分类

4、运行时系统异常/错误 Throwable:有两个重要的子类:Exception(异常)和Error(错误),二者都是Java异常处理的重要子类 Error(错误)表示运行应用程序中较严重问题,与代码无关,如JVM(Java 虚拟机)出错等。 Exception(异常)是应用程序中可能的可预测、可恢复问题 RuntimeException 类表示常用操作引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界等。

为什么要学习异常? 异常是时时刻刻存在的 总有一些问题是编译时刻预计不到的 能否很好地处理运行时刻的异常情况是一个程序健康的标志 用户都知道软件没有不出错的,所以要把运行错误报告给用户,而不是试图隐藏 异常信息对于程序的改进至关重要

传统错误处理

Java的Exception机制处理 使用异常机制,读、写和调试代码变得清晰。它把处理错误的代码和正常的代码分开。

2、异常机制

异常发生时,程序不能继续执行,会抛(throw)出一个异常。 2、异常机制 异常发生时,程序不能继续执行,会抛(throw)出一个异常。 一个异常对象建立起来了。 当前运行的路径被停止,异常对象被弹出(eject)。 异常处理机制接管,开始寻找一个合适的地方来继续执行。

2、异常机制 可执行程序语句 引发的异常 语句 1 ! 语句 2 停止 throw 异常 异常处理程序 语句 3

异常处理机制 消极的处理方式 积极的处理方式 Try-catch throws 捕获异常 声明抛出异常

在异常被抛出的过程中, 任何方法都可以捕获异常并进行相应的处理。 异常传递机制 在异常被抛出的过程中, 任何方法都可以捕获异常并进行相应的处理。 f() g() ... main()

如果所有的方法都选择了抛出此异常, 最后 JVM将捕获它,输出相关的错误信息,并终止程序的运行。 异常传递机制 如果所有的方法都选择了抛出此异常, 最后 JVM将捕获它,输出相关的错误信息,并终止程序的运行。 g() ... f() main()

2、异常机制

2、异常机制

按catch先后顺序,一旦匹配,不再执行后面的catch 匹配异常不需要精确匹配 按catch先后顺序,一旦匹配,不再执行后面的catch

捕获所有异常 如何捕获所有异常? catch (Exception e){}

练习 Test类有如下方法f(int a, int b),写一个main方法调用其并进行异常处理 class Test{ void f(int a, int b){ int c = a / b; }

Throwable 具有两个子类,它们是 异常类的层次结构 Exception:处理用户程序应当捕获的异常情况 Error:Error 类的异常为内部错误,因此在正常情况下不期望用户的程序捕获它们 Object Throwable Exception Error SQLException RuntimeException AWTError … ThreadDeath ArithmeticException NullPointerException NumberFormatException …

异 常 说 明 Java异常类 Exception 异常层次结构的根类 RuntimeException 许多 java.lang 异常的基类 ArithmeticException 算术错误情形,如以零作除数 IllegalArgumentException 方法接收到非法参数 ArrayIndexOutOfBoundException 数组大小小于或大于实际的数组大小 NullPointerException 尝试访问 null 对象成员 ClassNotFoundException 不能加载所需的类 NumberFormatException 数字转化格式异常,比如字符串到 float 型数字的转换无效 IOException I/O 异常的根类 FileNotFoundException 找不到文件 EOFException 文件结束 InterruptedException 线程中断

3、finally

try 块 catch 块 finally 块 2.3、finally 块 try、catch 和 finally 块的执行流程 异常 无异常 catch 块 finally 块

异常处理块的一般形式 try{ // 要监控错误的代码块 methodGeneratingException(); } catch (Exception e) { // Exception e 的异常处理程序 } finally{ // 在 try 结束前要执行的代码块 cleanup(); }

2.3、finally

如果我们定义了一个方法,该方法有可能出现异常,我们有义务告知别人,在使用该方法时进行异常处理。 3、异常声明 如果我们定义了一个方法,该方法有可能出现异常,我们有义务告知别人,在使用该方法时进行异常处理。

总结 异常是运行时发生的错误 可以使用 try、catch、throw、throws 和 finally 来管理 Java 异常处理。要监控的程序语句包含在 try 块内catch 块中的代码用于捕获和处理异常。在方法返回之前绝对必须执行的代码应放置在 finally 块中 要手动引发异常,使用关键字 throw。任何被抛到方法外部的异常都必须用 throws 子句指定 自定义异常的编写和使用

练习 1、关于try...catch...finally结构,描述正确的是哪项?__________ A. 必须包含多个catch B. 只能有一个catch C. finally必须有 D. 可以没有catch 2、运行下面程序时,会产生什么异常?_________。 public class X7_1_4 { public static void main(String[] args) { int x = 0; int y = 5/x; int[] z = {1,2,3,4}; int p = z[4]; } A. ArithmeticException B. NumberFormatException C. ArrayIndexOutOfBoundsException D. IOException

2018/12/3 谢谢