Java 2实用教程第5版_第5章_子类与继承
java语言的类间的继承关系
java语言的类间的继承关系1. 前言Java语言作为一门面向对象编程(OO)语言,其中最重要的特性之一是继承(Inheritance)。
继承使得一个类可以从另一个类中继承其特征,使得代码复用变得更加高效。
本文旨在介绍Java语言中类间的继承关系,从什么是继承开始,到如何在代码中使用继承,包括继承的类型、继承的规则和优缺点等。
2. 什么是继承继承(Inheritance)可以定义为一个类(子类)继承属性和方法的过程,这些属性和方法是已经存在于另一个类(父类)中的。
子类可以从父类继承其属性和方法,同时还可以添加自己的属性和方法。
在Java语言中,继承关系是一种“is-a”(是一个)关系,例如:“狗”是“动物”的一种,因此可以定义一个“狗”类,使其继承“动物”类的属性和方法。
3. 继承的类型Java语言中,有两种类型的继承,分别是类继承和接口继承。
3.1 类继承类继承指的是一个类从另一个类中继承其属性和方法。
在Java语言中,一个父类可以有多个子类,但是一个子类只能有一个直接父类。
如果一个子类有多个父类,则会构成多重继承。
Java语言中不支持多重继承的原因是,这会造成命名冲突,无法确定调用哪个方法。
3.2 接口继承接口继承指的是一个接口从另一个接口中继承其方法签名。
在Java语言中,一个类可以实现多个接口,但是一个接口只能继承一个接口。
4. 继承的规则在Java语言中,有一些规则限制了继承的使用。
这些规则是:4.1 访问修饰符子类可以继承父类中的方法和属性,但是子类不能访问父类中的私有属性和私有方法。
另外,子类可以访问父类中的公有属性和公有方法。
4.2 构造函数子类不能继承父类的构造函数,但是可以通过调用父类的构造函数来初始化父类中的属性。
4.3 方法重写子类可以重写父类中的方法,以实现子类自己的特定需求。
在重写方法时,子类必须使用相同的方法签名(名称、参数列表和返回类型)。
4.4 super关键字子类可以使用super关键字来调用父类中的方法或属性。
Java2实用教程课后答案-第三版-耿祥义-张跃平版
Java2实用教程(第三版)课后习题参考答案第1章 Java入门1. 开发与运行Java程序需要经过哪些主要步骤和过程?答:(1)编写Java源文件:使用文本编辑器(Edit或记事本),拓展名为。
java(2)编译Java源文件:使用Java编译器(javac。
exe)。
得到字节码文件*.class(3)运行Java程序:Java应用程序使用Java解释器(java。
exe)执行字节码文件;Java小应用程序使用支持Java标准的浏览器来执行.2。
怎样区分应用程序和小应用程序?应用程序的主类或小应用程序的主类必须用public修饰吗?答: ①应用程序必须有main方法,这个方法是程序执行的入口。
小应用程序没有main方法。
②应用程序的主类不一定用public修饰;小应用程序的主类必须用public修饰。
3. Java程序是由什么组成的?一个程序中必须要有public类吗?Java源文件的命名规则是怎样的?答:①Java程序由类组成.②应用程序可以没有public类;小应用程序一定有一个类是public类(主类)。
③应用程序:如果只有一个类,源文件名与该类的类名相同,拓展名为。
java;有多个类时,如果有public类(最多一个),源文件名与public类的类名相同,拓展名是.java;没有public类,源文件名与任何一个类的类名相同即可,拓展名为。
java.小应用程序:源文件名与主类的类名相同,拓展名是。
java。
4. 在运行小程序的HTML文件中可以使用codebase属性指定小程序的字节码所驻留的目录。
如果不使用codebase属性,小程序的字节码文件必须和运行它的HTML文件在同一目录中。
编写一个小程序并将小程序的字节码存放在某个目录中,比如C:\5000;把运行该小程序的HTML文件(注意其中的codebase属性):<applet code=你的小程序的字节码 width=200 height=300 codebase=C:\5000〉</applet>存放在另一个目录中。
Java程序设计精编教程5-8章知识点
b) 如果变量名由多个单词组成,从第 2 个单词开始的每个单词的首字母要大写。
方法
方法的定义包括两部分:方法声明和方法体。一般格式为:
方法声明部分 {
方法体的内容
}
方法声明
方法声明包括返回值类型、方法名和参数。
double getArea() { //返回值类型为 double,无参数。
…
}
方法的返回值类型可以是 Java 中的任意数据类型。如果一个方法不返回数据,返回值类型必须是 void。
2. 有一个类 Singleton,为该类设计单例模式(该类只能有一个实例,且不能在类的外部 new 对象),只能通过该类 的静态方法 getInstance()获取该类的唯一对象。在主类 Homework2 中测试单例模式的有效性。
b) 在实例方法中,不仅可以调用实例方法,也可以调用类方法。 2) 类名调用类方法
a) 在类方法中,只能调用类方法、操作类变量。 b) 也可以通过对象调用类方法。 c) 如果一个方法不需要操作实例变量就可以实现某种功能,可以考虑将其声明为类方法。(例 5-8) 5.7 方法重载与多态 Java 中有两种多态:重载(overload)和重写(override)。 方法重载(overload):一个类中可以有多个名字相同的方法,但这些方法的参数必须不同,或者参数的个数不同, 或者参数的类型不同。方法的返回值类型与重载无关。
5.8 this 关键字 this 只能出现在实例方法和构造方法(也属于实例方法)中,表示调用该方法的当前对象。 一般情况下,方法中 this.实例变量的 this 可省略、类名.类变量的类名可省略,但当局部变量与成员变量同名时,
this 或类名不能省略。 5.9 包
包是 Java 语言管理类的一种机制,类似于操作系统中的目录,使用包名可以有效区分名字相同的类。 包语句
Java大学实用教程课后答案
Java大学实用教程课后答案第一章1.发明java的原因是什么,发明java的主要贡献者是谁?答:开发java语言的动力源于对独立平台的需要,即用这种语言编写的程序不会因为芯片的变化而发生无法运行或出现运行错误的情况。
当时,c语言已无法满足人们的这一愿望,因为c语言总是针对特定的芯片将源程序编译成机器码,该机器码的运行就与特定的芯片指令有关,在其他类型的芯片上可能无法运行或者运行出错。
主要贡献者是James Gosling。
2.“java编译器将源文件编译生成的字节码是机器码”,这句话正确吗?答:不正确,字节码是很接近机器码的二进制文件,不能被机器直接识别。
3. java应用程序的主类必须含有怎么样的方法?4. "java应用程序必须有一个类是public类".这句话正确吗?答:一个java应用程序必须有一个类含有public static void main(String args[] )方法,称为该应用程序的主类。
5. "java applet程序的主类必须是public类",这句话正确吗?不正确"java applet源文件的主类必须是public类",这句话正确吗?正确6. 叙述java源文件的命名法则。
答:(1)如果源文件中有多个类,那么只能有一个类是public类。
(2)如果有一个类是public类,那么源文件的名字必须和这个类的名字完全相同,扩展名为.java(3)如果源文件没有public类,那么源文件的名字只要和某个类的名字相同,并且扩展名为.java就可以了。
(4)java 语言区分大小写。
7. 源文件生成的的字节码运行时加载到内存中吗?8. 怎样编写加载运行java applet的简单网页?9. JDK1.6编译器使用"-source"参数的作用是什么,其默认的参数取值是什么?答:在编译源文件时使用"-source"参数来约定字节码适合的java 平台。
JAVA实用教程(第三版)课后习题及答案
{
void g()
{
A a=new A(); a.weight=23f; a.f(3,4);
}}
答:a.weight=23f;错
1.编写一个类,该类创建的对象可以计算等差数列的和。解:classDengCha{
int start,d; DengCha(){
Case 4: System.out.printf(“%c”,’d’); Break;
}
}
输出:a,b, b,c,d,d
9.下列System.out.printf语句输出的结果是什么?
Char a[]={‘a’,’b’,’c’,’d’,’e’}; For(i=0; i<=a.length/2; i++)
答:不,只加载本程序用到的类到内存中,因为java程序是动态加载, 字节码类文件。
16.有哪几种访问权限修饰符?说出一种的作用。答:访问权限修饰符有public,private,protected.
Private作用是只允许本类的对象访问。
17.怎样反编译一个类?
答:使用SDK提供的反编译器javap.exe文件可以实现将字节码文件反编译为源码文件。可查看源码中public方法和public成员变量的名字。如加入参数-private则可列出其全部的成员方法和成员变量。
9.请阐述为什么类方法不能调用实例方法?
答:对于类方法在该类加到内存时就分配了相应的入口地址,所以即使该类未创建对象,也可以通过类名调用类方法。而这时在类对象创建之前,实例方法还没有入口地址。还不知道一个方法从何处开始执
行,当然不能调用。
10.请阐述,为什么类方法中不能操作实例成员变量?
Java基础[继承]
可。
• 数据库驱动,SSH框架等都是以jar包体现的。
Jar包的操作
通过jar.exe工具对jar的操作。
• 创建jar包 • jar -cvf mypack.jar packa packb
• 查看jar包 • jar -tvf mypack.jar [>定向文件]
一定会执行的代码; } Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)。
自定义异常
自定义类继承Exception或者其子类。 通过构造函数定义异常信息。 例:
Class DemoException extends Exception {
DemoException(String message) {
的区别。 思考:在开发时,分号是否需要呢?
包之间的访问
被访问的包中的类权限必须是public的。 类中的成员权限:public或者protected protected是为其他包中的子类提供的一种
权限 例程
北
京
传
智
播
客
教 育
四种权限
w
w
w
public protected default private
toString()
• 获取异常类名和异常信息,返回字符串。
printStackTrace()
• 获取异常类名和异常信息,以及异常出现在程序中的位 置。返回值void。
printStackTrace(PrintStream s)
• 通常用该方法将异常内容保存在日志文件中,以便查阅。
throws和throw
Java2课后选择题
Java2课后选择题Java2课后选择题Java2实用教程(第4版)课后选择题整理(以下内容可能会出现少量错别字,望见谅)――by[小坏蛋~]第一章选择题(1)下列哪个是JDK提供的编译器?A. java.exeB.javac.exeC.javap.exeD. javaw.exe(2)下列哪个是Java应用程序主类中正确的main方法?A. public void main (String args[])B.static void main (String args[])C .public static void Main (String args[])D .public static void main (String args[])第二章.选择题(1)下列哪项字符序列可以作为标识符?A .trueB .default C. _int D.good-class(2)下列哪三项是正确的float变量的声明?A .float foo=-1;B .float foo=1.0;C .float foo=42e1; D. float foo=2.02f;E .float foo== 3.03d; F. float foo== 0x0123;(3)下列哪一项叙述是正确的?A. char型字符在Unicode表中的位置范围是0至__B. char型字符在Unicode表中的位置范围是0至__C. char型字符在Unicode表中的位置范围是0至__D. char型字符在Unicode表中的位置范围是-__至__(4)以下哪两项是正确的char型变量的声明?A. char ch=“R"; B .char ch='\\'C. char ch='ABCD';D. char ch="ABCD";E. char ch='\ucafc';F. char ch='\u__'(5)下列程序中哪些[代码]是错误的?public class E{ public static void main(String args[]){ int x =8;byte b=127; //【代码1】b=x; /【代码2】x=12L; //【代码3】long y=8.0; //【代码4】float z=6.89; //【代码5】}Java2课后选择题}(6)对于int a[]=new int;下列哪个叙述是错误的?A. a.length的值是3。
Java编程基础及应用(第2版)教学课件第5章 类和对象
{ 程序语句! 〃定义成员方法 [return表达式];
} }
7
§5.1.2 类的定义
说明: (1) class关键字,用于定义类。“class类名”是类的声明 部分, 类名必须是合法的Java标识符,通常第一个字母大写 ,能体现类的功能和作用。 (2 )类的修饰字有:[public] > [abstract | final] 、缺省方式 为 friendly。其中,abstract类不能直接产生属于这个类的对 象;final类不能被其他任何类所继承;public类不但可以被同 一程序包中的其他类使用,别的程序包中的类也可以使用; friendly(缺省)类只能被本包中的其他类使用。
一个对象 就要为对象的各个成员变量分配存 储空间,可以通过 引用对象的成员来使用对 象。 -对象数据成员的引用方式如下:
-对象成员方法的引用方式如下:
22
§5.1.3 对象的创建、使用及清除
例5.3定义DogTestl类,创建该类对象dog,使用该对象 并输
岀相应信息。
程序运行结果: dog阿黄的年龄:3,毛发的颜色:黄色 狗在汪汪叫…
(4) 方法不能嵌套,即不能在方法中再声明其他方法。 (5) 同一个类中的方法可以访问该类的成员变量。 (6) 一个类的方法只能访问自己的局部变量。
17
§5.1.2 类的定义
-例5.1定义Dog类,并设置其属性和方法。
在上面的程序屮,Dog类定义了name、age和color三 个属性,分别表示狗的姓名、年龄和毛发颜色,然后 定义了一个bark()方法,表明狗有汪汪叫的能力。
返回值的 类型和访问限制;方法体由括号内的声明部分和语 句部分组成,描述方法的功能。
上机实践5子类与继承
实验1中国人、北京人和美国人1 相关知识点由继承而得到的类称为子类,被继承的类称为父类(超类),Java不支持多重继承,即子类只能有一个父类。
人们习惯地称子类与父类的关系是“is-a”关系。
如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,继承的成员变量或方法的访问权限保持不变。
子类和父类不在同一个包中时,父类中的private 和友好访问权限的成员变量不会被子类继承,也就是说,子类只继承父类中的protected和public访问权限的成员变量作为子类的成员变量;同样,子类只继承父类中的protected和public访问权限的方法作为子类的方法。
子类声明的成员的变量的名字和从父类继承来的成员变量的名字相同时,将隐藏掉所继承的成员变量。
方法重写是指:子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型,并且这个方法的名字、参数个数、参数的类型和父类的方法完全相同。
子类如此定义的方法称作子类重写的方法。
子类继承的方法所操作的成员变量一定是被子类继承或隐藏的成员变量。
重写方法既可以操作继承的成员变量、调用继承的方法,也可以操作子类新声明的成员变量、调用新定义的其他方法,但无法操作被子类隐藏的成员变量和方法。
2 实验目的本实验的目的是让学生巩固下列知识点。
子类的继承性。
子类对象的创建过程。
成员变量的继承与隐藏。
方法的继承与重写。
3 实验要求编写程序模拟中国人、美国人是人,北京人是中国人。
除主类外,程序中还有4个类:People、ChinaPeople、AmericanPeople和BeijingPeople类。
要求如下。
People类有权限是protected的double型成员变量height和weight,以及public void speakHello()、public void averageHeight()和public void averageWeight()方法。
Java2实用教程(第5版)答案_耿祥义
Java2实用教程(第5版)最新答案耿祥义第1章一、问答题1.James Gosling2.需3个步骤:用文本编辑器编写源文件。
使用javac编译源文件,得到字节码文件。
使用解释器运行程序。
3.由类所构成,应用程序必须有一个类含有public static void main(String args[])方法,含有该方法的类称为应用程序的主类。
不一定,但最多有一个public类。
4.set classpath=D:\jdk\jre\lib\rt.jar;.;5.java和class6.java Bird7.独行风格(大括号独占行)和行尾风格(左大扩号在上一行行尾,右大括号独占行)二、选择题1.B。
2.D。
三、阅读程序1.(a)Person.java。
(b)两个字节码,分别是Person.class和Xiti.class。
(c)得到“NoSuchMethodError”,得到“NoClassDefFoundError: Xiti/class”,得到“您好,很高兴认识您nice to meet you”第2章一、问答题1.用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列称为标识符。
标识符由字母、下划线、美元符号和数字组成,第一个字符不能是数字。
false不是标识符。
2.关键字就是Java语言中已经被赋予特定意义的一些单词,不可以把关键字作为名字来用。
不是关键字。
class implements interface enum extends abstract。
3.boolean,char,byte,short,int,long,float,double。
4.float常量必须用F或f为后缀。
double常量用D或d为后缀,但允许省略后缀。
5.一维数组名.length。
二维数组名.length。
二、选择题1.C。
2.ADF。
3.B。
4.BE。
5.【代码2】【代码3】【代码4】【代码5】。
(6条消息)Java2实用教程(第5版)耿祥义版习题五
(6条消息)Java2实用教程(第5版)耿祥义版习题五一、问答题1.子类可以有多个父类吗?2.ng包中的Object类是所有其他类的祖先类吗?3.如果子类和父类不在同一个包中,子类是否继承父类的友好成员?4.子类怎样隐藏继承的成员变量?5.子类重写方法的规则是怎样的?重写方法的目的是什么?6.父类的final方法可以被子类重写吗?7.什么类中可以有abstract方法?8.对象的上转型对象有怎样的特点?9.一个类的各个子类是怎样体现多态的?10.面向抽象编程的目的和核心是什么?二、选择题1.下列哪个叙述是正确的?1.子类继承父类的构造方法。
2.abstract类的子类必须是非abstract类。
3.子类继承的方法只能操作子类继承和隐藏的成员变量。
4.子类重写或新增的方法也能直接操作被子类隐藏的成员变量。
2.下列哪个叙述是正确的?1.final 类可以有子类。
2.abstract类中只可以有abstract方法。
3.abstract类中可以有非abstract方法,但该方法不可以用final 修饰。
4.不可以同时用final和abstract修饰同一个方法。
5.允许使用static修饰abstract方法。
3.下列程序中注释的哪两个代码(A,B,C,D)是错误的(无法通过编译)?class Father {private int money =12;float height;int seeMoney(){return money ; //A}}class Son extends Father {int height;int lookMoney() {int m = seeMoney(); //Breturn m;}}class E {public static void main(String args[]) {Son erzi = new Son();erzi.money = 300; //Cerzi.height = 1.78F; //D}}4.假设C是B的子类,B是A的子类,cat是C类的一个对象,bird是B类的一个对象,下列哪个叙述是错误的?1.cat instanceof B的值是true。
第05章 异常处理
3.
类型强制转换异常ClassCastException Object obj = new Object();
String str = (String) obj;
《Java2程序设计实用教程(第2版)》
RuntimeException类(P131)
4.
负数组长度异常NegativeArraySizeException
int a[] = new int [-1]; //产生负数组长度异常 数组下标越界异常ArrayIndexOutOfBoundsException
5.
int a[] = new int[1];
a[1] = 1;
6.
//产生数组下标越界异常
数值格式异常NumberFormatException int j = Integer.parseInt("abc"); //产生数值格式异常
《Java2程序设计实用教程(第2版)》
5.1 Java异常处理基础
2.
Exception类分为:运行时异常和非运行时异常
运行时异常:是指由程序本身错误引起的异常,这类 异常程序设计时大多可以避免;如,除数为0,数组 下标越界。 (RuntimeException)
非运行时异常:是指由程序运行环境错误引起的异常,
能力。
《Java2程序设计实用教程(第2版)》
5.3 抛出异常
生成抛出异常:产生一个异常事件,生成一个异常对象。
Java虚拟机或Java应用程序 throw new Exception();
捕获处理异常:找到可处理此异常对象的方法所在的位 置,执行处理方法对异常对象进行处理。 Java虚拟机或 Java应用程序 try-catch-finally 只能是 Exception类及 其子类的对象
Java 2实用教程第5版_第5章_子类与继承
2.上转型对象可以访问子类继承或隐藏的成员变量,也可以调 用子类继承的方法或子类重写的实例方法。
3. 如果子类重写了父类的某个实例方法后,当用上转型对象调 用这个实例方法时一定是调用了子类重写的实例方法。 例子10 中, monkey 是 People 类型对象的上转 型对象,运行效 果如图5.10。
§5.1 子类与父类
➢ 继承是一种由已有的类创建新类的机制。利用继承, 我们可以先创建一个共有属性的一般类,根据该一般 类再创建具有特殊属性的新类,新类继承一般类的状 态和行为,并根据需要增加它自己的新的状态和行为。 由继承而得到的类称为子类,被继承的类称为父类 (超类)。
➢ Java不支持多重继承(子类只能有一个父类)。
➢ 子类可以通过继承的方法来操作子类未继承的变量和方法 .
例 子 2中 , 子 类 ChinaPeople的 对象调用继承的方法操作未被子类 继承却分配了内存空间的变量。程 序运行效果如图5.3。
5.3.1 子类对象的生成
class AA{
AA(){
System.out.println("上层父类A的构造方法");
例题
4.重写的注意事项
➢ 重写父类的方法时,不允许降低方法的访问权限,但可以提高 访问权限(访问限制修饰符按访问权限从高到低的排列顺序是: public、protected、友好的、private。)
在下面的例子4(Example5_4.java)中,ImportantUniversity是 University类的子类,子类重写了父类的enterRule()方法,运行效 果如图5.5。
5.3.2 关于instanceof运算符
Java语言实验4 子类与继承
System.out.println("a of son's super is :" +son.getA());
son.miner();
System.out.println("a of son is :"+son.a);
System.out.println(“加toString()输出:”+d.toString());
}
}
(2)编译运行程序,观察结果。
(3)实验报告
运行结果:
思考:为什么两次输出都是同样结果。
Demo有父类吗?
答:因为没有指定父类,就默认继承Object类,即默认调用对象的toString()方法。所以两次输出同样的结果。
B(int a,int b)
{
i=a;
k=b;
}
int multiply()/**重写了父类的multiply()方法*/
{
return i*j*k;
}
}
步骤三:创建并运行应用程序。
public class LX
{
public static void main(SFra bibliotekring a[])
{
B subO=new B(6,9);
System.out.println(“姓名:”+stu.getName()+”,年龄:”+stu.getAge()
+”,学校:”+stu.getSchool());
}
}
(2)实验报告
运行结果:
JAVA2实用教程-6
复旦大学IBM技术中心
13
Applet的一个简单例子(续一)
public void start() { sum=0; for (int i=1;i<=100;i++) { sum=sum+i ; } } public void stop() {} public void destroy() {} public void paint (Graphics g) { g.setColor(Color.blue) ; g.drawString("程序设计方法", 20, 60); g.setColor(Color.red) ; g.drawString( "sum= "+sum, 20, 100); } }
//例子1
import java.applet.*; ,而且类名与文件名必须相同 import java.awt.*; public class Example7_1 extends Applet
{
注意:主类必须声明为public
Button button1; Button button2; int sum; public void init() { button1=new Button("Yes"); button2=new Button("No"); add(button1); add(button2); }
…
}
上一页 下一页 退 出
复旦大学IBM技术中心
21
java.applet.Applet类
Applet类
– 属于 java.apple包 – 继承 extends Applet
第5、6章-java2实用教程PPT课件
ng,java.io,java.math,java.util
java.applet,java.awt,java.awt.datatransfer
java.awt.event,java.awt.image,java.beans
,java.rmi,java.security,java.sql等
第五、六章 Java基础类
-字符串、日期、时间、数字
JAVA语言程序设计
清华大学 郑莉
4.6.1 Java 基础类库简介
(Java2实用教程-4.18、第5、6章)
Java基础类库
– Java提供了用于语言开发的类库,称为
包 的 应 用
Java基础类库(JFC,Java Foundational Class) , 也称应用程序编程接口(API,Application Programming Interface),分别放在不同的包中
包
的类,包括
的
Object类
应
数据类型包裹类(the Data Type Wrapper)
用
字符串类(String、StringBuffer)
数学类(Math)
系统和运行时类(System、Runtime)
类操作类
.
4
JAVA语言程序设计
清华大学 郑莉
4.6.1 Java基础类库简介(续)
– Float.parseFloat(“123.11”) //返回float型
– Long.parseLong(“123456”) //返回long型
.
8
JAVA语言程序设计
清华大学 郑莉
4.6.1 Java基础类库简介(续) (参加补充章节) ——常量字符串类String
Java 2实用教程(第5版)
教材特色
该教材注重可读性和实用性,配备了例题和习题。该教材采用JDK1.8(JDK8)。该教材针对较难理解的问题, 都是从简单到复杂,逐步深入地引入例子,便于读者掌握Java面向对象编程思想。
该教材是《Java2实用教程》的第5版,继续保留原教材的特点——注重教材的可读性和实用性,许多例题都 经过考虑,既能帮助理解知识,又具有启发性。
作者简介
耿祥义,1995年中国科学技术大学博士毕业,获理学博士学位。1997年从中山大学博士后流动站出站,大连 交通大学教授。有教授Java语言的经验。
谢谢观看
第8章讲述常用的实用类,包括字符串、日期、正则表达式、模式匹配以及数学计算等实用类,讲解了怎样使 用StringTokenizer、Scanner、Pattern和Matcher类解析字符串。
第9章介绍了组件的有关知识,把对事件处理的讲解分散到具体的组件,只要真正理解掌握了一种组件事件的 处理过程,就会掌握其他组件的事件处理。输入流、输出流是Java语言中的经典内容,尽管Java提供了二十多种 流,但它们的用法、原理却很类似。
该教材对部分章节的内容做了调整,删除了原第16章的有关JavaApplet的内容;特别修改了原第11章,将数 据库改为MySQL数据库。该教材由耿祥义、张跃平编著。
2017年5月1日,该教材由清华大学出版社出版。
内容简介
全书共分15章,分别介绍了Java的基本数据类型,运算符、表达式和语句,类与对象,子类与继承,接口与 实现,内部类与异常类,常用实用类,组件及事件处理,输入、输出流,JDBC与MySQL数据库,Java多线程机制, Java络编程,图形、图像与音频,泛型与集合框架等内容。每章提供的二维码可观看相应章节的视频讲解。
全书共分15章,分别介绍了Java的基本数据类型,运算符、表达式和语句,类与对象,子类与继承,接口与 实现,内部类与异常类,常用实用类,组件及事件处理,输入、输出流,JDBC与MySQL数据库,Java多线程机制, Java络编程,图形、图像与音频,泛型与集合框架等内容。
Java程序设计实用教程(第2版)第5章_子类与继承
例5-5 Example5_5.java 例5-5中,子类B重写了父类的computer()方法,运行效果如图5.5
例5-5中,如果子类如下重写方法computer将产生编译错误。
double computer(float x,float y) { return x*y;
}
其原因是,父类的方法computer的类型是float,子类的重写方 法computer没有和父类的方法computer保持类型一致,这样子 类就无法隐藏继承的方法,导致子类出现2个方法的名字相同, 参数也相同,这是不允许的。
2019/8/2 9
§5.2.4 继承关系(Generalization)的UML图
如果一个类是另一个 类的子类,那么UML通过 使用一个实线连接两个 类的UML图来表示二者之 间的继承关系,实线的 起始端是子类的UML图, 终点端是父类的UML图, 但终点端使用一个空心 的三角形表示实线的结 束。
2019/8/2 7
§5.2.2 子类和父类不在同一包中的继承性
如果子类和父类不在同一个包中,那么,子 类 继 承 了 父 类 的 protected、public 成 员 变 量 做 为子类的成员变量,并且继承了父类的 protected、public 方 法 为 子 类 的 方 法 , 继 承 的 成员或方法的访问权限保持不变。
2019/8/2 8
§5.2.3 protected的进一步说明 ( 选讲 )
一个类A中的protected成员变量和方法可以被它的直接子类 和间接子类继承,如B是A的子类,C是B的子类,D又是C的子类, 那么B、C和D类都继承了A类的protected成员变量和方法。
如果用D类在D中创建了一个对象,该对象总是可以通过“.” 运算符访问继承的或自己定义的protected变量和protected方法 的,但是,如果在另外一个类中,如在Other类中用D类创建了一个 对 象 object, 该 对 象 通 过 “ . ” 运 算 符 访 问 protected 变 量 和 protected方法的权限如所述。 ( 1 ) 对 于 子 类 D 中 声 明 的 protected 成 员 变 量 和 方 法 , 如 果 object要访问这些protected成员变量和方法,只要Other类和D 类在同一个包中就可以了。 (2)如果子类D的对象的protected成员变量或protected方法是 从父类继承的,那么就要一直追溯到该protected成员变量或方 法的“祖先”类,即A类,如果Other类和A类在同一个包中,那 么object对象能访问继承的protected变量和protected方法。
java继承的概念
Java继承先说继承继承是面向对象最显著的一个特性。
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。
比如可以先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
再说Java继承Java继承是面向对象的最显著的一个特征。
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
类和类之间的继承关系可以用UML符号表示,其中父类又叫超类或基类,子类又叫派生类。
父类是子类的一般化,子类是父类的特化(具体化)。
JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承的缺点。
在面向对象程序设计中运用继承原则,就是在每个由一般类和特殊类形成的一般——特殊结构中,把一般类的对象实例和所有特殊类的对象实例都共同具有的属性和操作一次性地在一般类中进行显式的定义,在特殊类中不再重复地定义一般类中已经定义的东西,但是在语义上,特殊类却自动地、隐含地拥有它的一般类(以及所有更上层的一般类)中定义的属性和操作。
特殊类的对象拥有其一般类的全部或部分属性与方法,称作特殊类对一般类的继承。
继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。
若类B继承类A,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能(操作),我们称被继承的类A为基类、父类或超类,而称继承类B为A的派生类或子类。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
§5.8 继承与多态
多态性就是指父类的某个方法被其子类重写时,可以各自 产生自己的功能行为。
下面的例子11展示了多态,运行效果如图5.11。
§5.9 abstract类和abstract()方法
用关键字abstract修饰的类称为abstract类(抽象类)。
例如:abstract class A { ……
Son s=new Son();
5.3.1 子类对象的生成Fra bibliotek 子类创建对象时,子类的构造方法总是先调用父类的某个 构造方法,完成父类部分的创建;然后再调用子类自己的 构造方法,完成子类部分的创建。如果子类的构造方法没 有明显地指明使用父类的哪个构造方法,子类就调用父类 的不带参数的构造方法 。
子类在创建一个子类对象时,不仅子类中声明的成员变量 被分配了内存,而且父类的所有的成员变量也都分配了内 存空间,但子类只能操作继承的那部分成员变量 。
同样,子类通过重写可以隐藏已继承的实例方法。 1.重写的语法规则
– 如果子类继承了父类的实例方法,那么子类就有权利重写这 个方法。
– 方法重写是指:子类中定义一个方法,这个方法的类型和父 类的方法的类型一致或是父类方法的类型的子类型,且这个 方法的名字、参数个数、参数的类型和父类的方法完全相同.
2.重写的目的
§5.2 子类的继承性
例题:子类的继承
class Father { float weight,height;
String head; void speak(String s) { System.out.println(s); } } class Son extends Father { String hand,foot; }
例题
4.重写的注意事项
重写父类的方法时,不允许降低方法的访问权限,但可以提高 访问权限(访问限制修饰符按访问权限从高到低的排列顺序是: public、protected、友好的、private。)
在下面的例子4(Example5_4.java)中,ImportantUniversity是 University类的子类,子类重写了父类的enterRule()方法,运行效 果如图5.5。
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一 目录中,即不要移动文件夹“代码”的默认位置
第5章 子类与继承
配合例子源代码一起使用
课件制作人 张跃平
导读
主要内容
– 子类与父类 – 子类的继承性 – 子类与对象 – 成员变量的隐藏和方法重写 – super关键字 – final关键字 – 对象的上转型对象 – 继承与多态 – abstract类与abstract方法 – 面向抽象编程 – 开-闭原则
§5.3 子类与对象
类继承了父类的很多东西,那么子类在创建对象的时候, 他又是怎么生成自己的对象的呢。子类生产的对象会有哪 些东西呢。
例题:子类的继承 class Father { float weight,height;
String head; void speak(String s) { System.out.println(s); } } class Son extends Father { String hand,foot; }
}
用关键字abstract修饰的方法称为abstract方法(抽象方法)
例如:abstract int min(int x,int y);
abstract类有如下特点
– 和普通的类相比,abstract类里可以有abstract方法。也可以 没有。对于abstract方法,只允许声明,不允许实现,而且 不允许使用final修饰abstract方法。
§5.6 final关键字
final关键字可以修饰类、成员变量和方法中的局部变量。
– 可以使用final将类声明为final类。final类不能被继承,即不 能有子类。 如: final class A {
…… }
– 如果用final修饰父类中的一个方法,那么这个方法不允许 子类重写。
– 如果成员变量或局部变量被修饰为final的,就是常量。
Java不支持多重继承(子类只能有一个父类)。
5.1.1 声明子类
使用关键字extends来定义一个类的子类,格式如下: class 子类名 extends 父类名 { … }
例如: class Student extends People { … }
说明:把Student类定义为People类的子类、People类是Student 类的父类
5.1.2类的树形结构
Java的类按继承关系形成树形结构这个树形结构中,根节 点是Object类(Object是ng包中的类),即Object是 所有类的祖先类。
除了Object类,每个类都有且仅有一个父类,一个类可以 有多个或零个子类。如果一个类(除了Object类)的声明 中没有使用extends关键字,这个类被系统默认为是Object 的子类,即类声明“class A”与“class A extends Object”是 等同的。
– 子类通过方法的重写可以隐藏继承的方法,子类通过方法的 重写可以把父类的状态和行为改变为自身的状态和行为。
3. 重写后方法的调用
– 子类创建的一个对象,如果子类重写了父类的方法,则运行 时系统调用的是子类重写的方法;
– 子类创建的一个对象,如果子类未重写父类的方法,则运行 时系统调用的是子类继承的方法;
§5.2.2 子类和父类不在同一包中的继承性
如果子类和父类不在同一个包中,那么,子类继承了父类 的protected、public成员变量做为子类的成员变量,并且 继承了父类的protected、public方法为子类的方法,继承 的成员或方法的访问权限保持不变。请看下例。
public class People {
§5.5 super关键字
1 用super操作被隐藏的成员变量和方法
子类可以隐藏从父类继承的成员变量和方法,如果在子类中想 使用被子类隐藏的成员变量或方法就可以使用关键字super。 比如super.x、super.play()就是访问和调用被子类隐藏的成员变 量x和方法play(). 例子7中,子类使用super访问和调用被子类隐藏的成员变量和 方法,运行效果如图5.7。
int age,leg = 2,hand = 2;
public void showPeopleMess() {
System.out.printf("%d岁,%d只脚,%d只手\t",age,leg,hand);
}
}
public class Student extends People {
int number;
Son s=new Son();
§5.2.1 子类和父类在同一包中的继承性
如果子类和父类在同一个包中,那么,子类自然地继承了 其父类中不是private的成员变量作为自己的成员变量,并 且也自然地继承了父类中不是private的方法作为自己的方 法,继承的成员变量或方法的访问权限保持不变。
下面的例子1中有4个类:People,Student.java, UniverStudent.java和Example5_1,这些类都没有包名 (需要分别打开文本编辑器编写、保存这些类的源文件, 比如保存到C:\ch5目录中),其中UniverStudent类是 Student的子类,Student是People的子类。程序运行效果如 图5.1。
§5.5 super关键字
2 使用super调用父类的构造方法
子类不继承父类的构造方法,因此,子类如果想使用 父类的构造方法,必须在子类的构造方法中使用,并 且必须使用关键字super来表示,而且super必须是子 类构造方法中的头一条语句。
例子8中,UniverStudent是Student的子类,UniverStudent子类 在构造方法中使用了super关键字,运行效果如图5.8。
Test() { stu s=new String();
if(s instanceof String) { System.out.println(“YES”); } } }
§5.4 成员变量的隐藏和方法重写
§5.4.1 成员变量的隐藏 对于子类可以从父类继承的成员变量,只要子类中声明的
成员变量和父类中的成员变量同名时,子类就隐藏了继承 的成员变量。 在子类中要操作这个与父类同名的成员变量时,子类操作 的是子类重新声明的这个成员变量。而不是被隐藏掉的。
5.3.2 关于instanceof运算符
instanceof运算符是Java独有的双目运算符,其左面的操作 元是对象,右面的操作元是类,当左面的操作元是右面的 类或其子类所创建的对象时,instanceof运算的结果是true, 否则是false 。请看例题。
class Test { String s;
1.上转型对象不能操作子类新增的成员变量;不能调用子类新 增的方法。
2.上转型对象可以访问子类继承或隐藏的成员变量,也可以调 用子类继承的方法或子类重写的实例方法。
3. 如果子类重写了父类的某个实例方法后,当用上转型对象调 用这个实例方法时一定是调用了子类重写的实例方法。
例子10 中, monkey 是 People 类型对象的上转 型对象,运行效 果如图5.10。
例子9 使用了final关键字
§5.7 对象的上转型对象
假设,A类是B类的父类,当用子类创建一个对象,并把 这个对象的引用放到父类的对象中时,称对象a是对象b的 上转型对象。比如: A a; a=new B(); 或 A a; B b=new B(); a=b;
§5.7 对象的上转型对象
上转型对象的使用
void tellMessage() {