西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

第三讲 Java与面向对象技术 1、面向对象的概念 2、Java中的类、方法和变量 3、Java名字空间及访问规则
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第一單元 建立java 程式.
项目6 通用堆栈.
四資二甲 第三週作業 物件導向程式設計.
面向对象的程序设计(一).
MVC Servlet与MVC设计模式.
第一章 面向对象程序设计.
程設一.
第二章 JAVA语言基础.
第二部分 Java语言基础篇 第4章 Java语言与面向对象 (之一).
類別的繼承-一般關係: 繼承是宣告的類別繼承現存類別的部份或全部的成員資料和方法 , 新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法
第7单元 面向过程编程—— 继承与多态.
Ch07 介面與多重繼承 物件導向程式設計(II).
第5章 进一步讨论对象和类.
再回首: Java关键字 数据类型:byte boolean char double float int long short ,
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
Ch08 巢狀類別 物件導向程式設計(II).
程式設計實作.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
例外處理(Exception Handling)
Java语言程序设计 第七部分 多线程.
Java基础 JavaSE异常.
Classes Lecturer: 曾學文.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
第六章 类的扩展与继承.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
本單元介紹何謂變數,及說明變數的宣告方式。
程式設計實作.
Java软件设计基础 5. 继承与多态.
Java语言程序设计 第五部分 Java异常处理.
Java程序设计 第9章 继承和多态.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
類別的繼承 Vehicle Car.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
例外處理與 物件序列化(Exception Handling and Serialization of Objects)
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
异常及处理.
Php class 組員: 賴羿陵 林昱廷 莊正暉 張雅晴
Java程序设计 第2章 基本数据类型及操作.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
第一單元 建立java 程式.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第7章 异常处理.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Interfaces and Packages
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
Java程序设计 第17章 异常和断言.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
辅导课程十二.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第4讲 类和对象、异常处理 ggao.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型

类的继承 继承的定义 类继承就是子类继承父类的成员变量和方法作为自己的成员变量和方法。 继承是一种由已有的类创建新类的机制。 执行继承时,子类将获得父类的属性和方法,并具有自己特有的属性和方法。 Emoloyee类: name sex Worker类: category workshop Officer类: empClass vehicle

继承一个类 extends关键字用于继承类。 声明一个继承父类的类的通常形式如下: class subclass-name extends superclass-name { //类体 } 没有关键字extends,默认父类为Object。 单继承,只能有一个父类,即extends后面不能有多个类的名字

子类的继承性 Java不支持多重继承,一个子类只有一个父类。 Object类是所有类的父类。 子类和父类在同一包中的继承性 子类自然地继承了其父类中非private的成员变量和方法作为自己的成员变量和方法。 子类继承到的成员变量以及方法的访问权限保持不变。

子类和父类不在同一包中的继承性 子类只能继承其父类中的public和protected成员变量和方法作为自己的成员变量和方法。 子类继承到的成员变量以及方法的访问权限保持不变。

子类对象的构造过程 子类的构造方法总是先调用父类的某个构造方法,如果子类的构造方法没有指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。 子类对象构造的结果 将子类中声明的成员变量做为子类对象的成员变量,并分配内存空间。 父类的成员变量也都分配了内存空间,但只将其中一部分(继承的那部分)做为子类对象的成员变量。

子类未继承的成员 引用 子类对象 子类继承的成员 子类声明的成员 子类对象内存示意图

成员变量的隐藏和方法的重写 成员变量的隐藏 当在子类中定义和父类中同名的成员变量时,子类就隐藏了继承的成员变量。 super.y class A{ protected double y=12.56; } class B extends A{ int y=0; void g(){ y=y+100; System.out.printf("y=%d\n",y); 使用关键字super可以使用父类中被子类隐藏掉的成员变量。 super.y

方法重写 方法重写是指:子类中定义一个方法,并且这个方法的名字、返回类型、参数个数和类型与从父类继承的方法完全相同。 子类通过方法重写来隐藏继承的方法。 子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。 使用关键字super可以使用父类中被子类隐藏掉的成员方法。

继承过程中,protected的访问权限不变 A B C D class A{ protected int n = 5; protected int increaseNum(int a){ return a+1; } class E{ …… D object1 = new D(); object1.firstnum = 10; object1.n = 50; } 要求E类和A类在同一个包中 要求E类和D类在同一个包中

Super关键字 Super关键字有两种用法 子类使用super调用父类的构造方法。 super必须是子类构造方法中的第一条语句。

final类和final方法 final类不能被继承,即不能有子类 final方法不能被重写

使用abstract类 用关键字abstract修饰类称为abstract类。 在继承的过程中,祖先类的方法更通用,这样,可以把尽可能多的通用属性和功能放到祖先类中,作为继承的基础。 这样一个祖先类,抽象程度更高,可以定义为一个抽象类。 抽象类不能被实例化,即不能用new运算符创建对象,必须产生其子类,由子类创建对象。

abstract class Person{ private String; public Person(String n){ name = n; } public abstract String getDescription(); public String getName(){ return name; 对于abstract方法,只允许声明,不允许实现

class Student extends Person{ private String major; pulbic Student(String n,String m){ super(n); major = m; } public String getDescription(){ return “a student majoring” + major; 抽象类的子类必须实现abstract方法,即重写父类的abstract方法。

接 口 接口的定义 接口方法定义和常量值的集合,而没有方法的实现。 通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系 使用关键字interface定义接口 [public] interface interfaceName [extends SuperInterfaceList]{ …… // 常量和方法定义 }

接口的使用 接口不能实例化,即不能用new运算符创建对象。 一个类通过使用关键字implements声明自己实现一个或多个接口。 在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。 接口中的方法是自动公有的,在实现接口时必须把方法声明为public。

class FIFOQueue implements Collection { void add ( Object obj ) …… } void delete( Object obj ) Object find( Object obj ) int currentCount() interface Collection { int MAX_NUM=100; void add (Object obj); void delete (Object obj); Object find (Object obj); int currentCount ( ); }

内部类 一个类中声明另一个类,这样的类称作内部类,而包含内部类的类成为外嵌类。 内部类同类中声明的方法或成员变量一样,一个类把内部类看作是自己的成员。 外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。 内部类的类体中不可以声明类变量和类方法。

class A{ private double y=12.56; class B { int y=0; public void g(){ y=y+100; System.out.printf("y=%d\n",y); }

匿名类 类创建对象时,除了构造方法还有类体,称作匿名类。 new Hello (){ public int getNum(){ //匿名类的类体 …… } 匿名类也是内部类,因此匿名类可以访问外嵌类中的成员变量和方法,不可以声明类变量和类方法。

匿名类的主要用途就是向方法的参数传值。 this.addwindowListener(new WindowAdaPter(){ publie void windowClosing(WindowEvent e){ System.exit(0); } });

异常类 在错误发生点,你可能不知道如何处理,但你知道无法再继续下去;你得停下来,而必须有某个地点的某个人知道如何处理才行,这就是异常及其处理。 Java运行环境就用异常类Exception的相应子类创建一个异常对象,并等待处理异常。 异常处理 使用try~catch语句捕获异常。

语法结构 try{ 可能产生异常的代码段; } catch(异常类名1 对象名1){ 处理语句组1; catch(异常类名2 对象名2){ 处理语句组2; ……

catch捕获并处理try语句块里面的异常 public class ExceptionExample{ public static void main(String[ ] args){ int n=0,m=0,t=0; try{ t=9999; m=Integer.parseInt("8888"); n=Integer.parseInt("12s3a"); System.out.println("我没有机会输出"); }catch(Exception e){ System.out.println("发生异常"); n=123; } System.out.println("n="+n+",m="+m+",t="+t); 不能转换成数字,出现异常 catch捕获并处理try语句块里面的异常

需要注意的问题 try语句块必须有catch语句块或finally语句块匹配。 try块内的任何代码抛出了由catch指定的异常,则: 程序跳过try块的其他代码; 程序执行catch语句块中的代码。 如果try块内没有代码出现异常,则跳过catch语句。

throws可以列举方法可能引发的所有异常。 通过声明方法来抛出异常,由调用者处理。 throws可以列举方法可能引发的所有异常。 Java中定义好了一些异常类,可以使用throws语句抛出该异常,由Java运行环境自动处理,比如: public static void main(String[ ] args) throws IOException{ ……………… i=Integer.parseInt(din.readLine()); ……………... }

自定义异常类 可以扩展Exception类实现自定义异常类。 自定义异常类必须是java.lang.Exception类(或者Exception类的子类)的子类。 java.lang.Exception类的有两个构造方法: Exception();Exception(String message)。 自定义异常类可以不定义构造方法。 SimpleException() { super(); }

Throw SimpleException from f() SimpleException Caught it! class SimpleException extends Exception { public MyException() { } } public class MyExceptionDemo { public void f() throws SimpleException { System.out.println("Throw SimpleException from f()"); throw new SimpleException(); } public static void main(String[] args) { SimpleExceptionDemo sed = new SimpleExceptionDemo(); try { sed.f(); } catch(SimpleException e) { System.out.println(e); System.out.println("Caught it!"); 运行结果: Throw SimpleException from f() SimpleException Caught it!

泛型类 泛型(Generics)是SDK1.5中推出的,其主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构。 泛型类的声明 可以使用“class 名称<泛型列表>”声明一个类。如:class A<E > 范型列表中的每个范型可以是任何对象或接口,但不能是基本类型数据。 泛型类的类体由成员变量和方法构成。

class Chorus<E,F>{ void makeChorus(E person,F yueqi){ person.toString(); yueqi.toString(); }

使用泛型类声明对象时,必须要指定类中使用的泛型的具体实际类型。 Chorus<Student,Button> model model = new Chorus<Student,Button>(); 这里是具体的类名