第6章 继承、接口和包.ppt_第1页
第6章 继承、接口和包.ppt_第2页
第6章 继承、接口和包.ppt_第3页
第6章 继承、接口和包.ppt_第4页
第6章 继承、接口和包.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章 继承、接口和包,学习重点: 继承关系 属性、方法在继承中的特点 接口的作用、定义和实现 包的创建及使用,2,6.1 继承的概念,继承:实现某个类无需重新定义就拥有另一个类的某些属性和方法,并把这种关系称为继承,先定义的类称父类,后定义的类称子类。 Java中通过关键字extends来定义两个类之间的继承关系 ,extends后面的是父类,新定义的是子类。 继承能够使子类拥有父类的非私有属性和方法,而不需在子类的类定义时重新定义父类的这些属性和方法。 子类既可以保持父类原有的属性和方法,也可以对从父类那里继承而来的属性和方法进行修改 。,3,Java不允许多重继承,一个类最多只能有一个直

2、接父类,4,例6.18:我们对Vehicle选取了以下内容进行定义p110 class car String brand; /品牌 void setb(String s)brand=s; Class bus extends car int gas; void setg(int g)gas=g; void showg()System.out.prinltn(gas); 我们对automobile进行如下简单的定义,那就含有了Vehicle的所有的方法和属性,并且还增加了一个燃油率的属性和一个减速方法。,5,public class exam public static void main(Str

3、ing args) bus b=new bus(); b.setb(“audi”); b.setg(100); b.showb(); b.showg(); car 类 bus类,6,6.2 多态的概念,多态是指在一棵继承树中的类中可以有多个同名但不同方法体以及不同形参的方法。 多态有两种情况:覆盖(重构/重写)和重载。 覆盖(重写/重构):是在子类中直接定义和父类同样的属性和方法,但重新编写了方法体,即子类与父类方法的形参与返回值都相同,而内部处理不同,这种方法在使用过程中,Java虚拟机会根据调用这个方法的父类对象或子类对象来确定是哪个方法被调用。 重载:是指同一个类定义中有多个同名的方法,

4、但有不同形参,而且每个方法有不同的方法体,调用时根据形参的个数和类型来决定调用的是哪个方法。,7,6.3 类成员的继承,类成员:指类的组成部分,包括属性、方法以及特殊的方法构造函数。 主要的内容有: 1、属性的继承、属性的覆盖 2、方法的继承、方法的重载、方法的覆盖 3、构造函数的继承 各有不同,下面我们就分别来讲解。,8,6.3.1 属性与方法的继承,一、属性 1. 属性的继承 子类对父类的属性继承,即子类不需要再定义就拥有了父类已有的非私有属性。 父类中的某个属性值发生了改变,子类中的属性值仍保持自己的状态,它不受父类的属性值影响,因为它们是两块不同的存储空间。 如果父类中该属性的定义发生

5、了变化,子类中该属性的类型定义也就跟着发生了变化。,9,指子类可以重新定义父类的非私有属性,即定义了与父类同名的属性,父类的属性仍然存在,要用关键字super来实现父类属性的直接引用。 属性的覆盖中,在使用时通过调用该属性的变量或者方法来决定使用哪一个,如果调用的是继承自父类中的方法,则是对父类中的属性进行操作,如调用的是子类中定义的方法时,则是对子类中的属性进行操作。 例6.3 属性的继承 P109 实例4.10,2、属性的覆盖,10,public class Father / 例6.3 int a=100; public void miner() a-; public static voi

6、d main(String args) Father x=new Father(); Son y = new Son(); System.out.println(a of son is :+y.a); System.out.println(“a of sons super is :”+y.getA(); y.miner();/看这一句执行后的结果 System.out.println(a of son is :+y.a); System.out.println(a of sons super is :+y.getA(); /main()定义完成 /Father类定义 class Son ext

7、ends Father int a=0; /属性覆盖,同时继承了父类的a=100 public void plus() a+; public int getA () return super.a; /son类定义,运行结果: a of son is :0 a of sons super is :100 a of son is :0 a of sons super is :99,11,二、方法的继承,方法的继承可以有覆盖和重载两种变化。 覆盖/重构:是在子类中直接定义和父类同样的属性和方法,但重新编写了方法体,即子类与父类方法同名、同参、同返回值,而内部处理不同,这种方法在使用过程中,Java虚

8、拟机会根据调用这个方法的类来确定哪个方法被调用。 重载:是指同一个类定义中有多个同名的方法,但有不同形参,而且每个方法有不同的方法体,返回值不一定相同,调用时根据形参的个数和类型来决定调用的是哪个方法。,12,this:指的是当前对象的地址,可以像对待其他任何对象地址一样对待。 super: 它和this不同,它并不是父类对象的地址,而是专门用来指代父类,即如果子类的对象想使用它父类中的同名属性和方法时,就用super。 this, super都不能在静态方法中使用。 以下四种类型的方法不能覆盖/重写:由private、 static、final修饰的方法、final类中的所有方法。 P128

9、 实例5.5,13,例如: class SuperClass float aNumber() a+; class Son extends SuperCalss float aNumber()a=a+10; 其中子类的aNumber()将覆盖父类的同名方法,但可以通过super.aNumber()来使用父类中定义的方法aNumber()。,14,例子:,class student /自己看 private int studentID; private String studentName; student(int id,String name) studentID=id; studentName

10、=name; String getName() return studentName; void tuitionFree() System.out.println(studentName+”是辖区内学生,需交学费是RMB5000/年”); class jiedustudent extends student jiedustudent(int id, String name) super(id,name); /调用父类构造方法 void tuitionFee() System.out.println(studentName+”是借读生,需交学费是RMB8000/年”); ,16,public c

11、lass teststudent public static void main(String args) student st1=new student(001,”yinfei”); jiedustudent jdst=new jiedustudent(005,”王洪”); st1.tuitionFee(); jdst.tuitionFee(); 将上述的3个类存成三个java文件;,17,子类只继承父类的默认构造函数,即无形参构造函数,并且在创建对象时先调用这个构造函数对对象进行初始化,然后再调用子类自己定义的构造函数。 如果父类没有默认构造函数,那子类将不能从父类继承到任何构造函数。 如

12、果父类没有定义默认构造函数,那么,子类也不能定义自己的无参数构造函数。 如果子类想调用父类的非默认构造函数,必须用super来实现。 子类的构造函数的形参表只能使用父类构造函数中用过的形参表,或者是对它的扩展。,6.3.2 构造函数的继承,18,子类的构造函数的形参表只能使用父类构造函数中用过的形参表,或者是对它的扩展。,例如:父类的构造函数只有一个: Father(int i,String s) 那么它的子类只能定义这样的构造函数,例如: Son(int i,String s) Son(int i,String s,char c) Son(int i,String s,int j,) 而以下

13、的定义都是非法的: Son() Son(int i) Son(String s) Son(String s, int i),19,为了不违反前面说到的规定,我们在它的类定义中可以有两种方法设计构造函数。 不定义构造函数 使用super调用父类的构造函数,并可加入自己的定义。,20,1、Student() /空构造函数 2、Student(int $Flag) /判断在职生还是在校生,给出学生编号 if($Flag =1) sNo=sStartNo1+; /在校生学号加1 else if($Flag =0) sNo=sStartNo2+; /在职生学号加1 else System.out.pri

14、ntln(student Flag wrong!); 3、Student(int $Flag,String $sName,char $sSex)/给出学生编号输入姓名性别 if($Flag =1) sNo=sStartNo1+; else if($Flag =0) sNo=sStartNo2+; else System.out.println(student Flag wrong!); sName=$sName; sSex=$sSex; ,student类中定义了三个构造函数:,21,public class studentson extends student studentson() su

15、per(int $Flag); super (int $Flag,String $sName,char $sSex) System.out.println(“studentson constructor !”); 子类中只继承了父类中的默认构造函数,当使用super调用父类中的带形参构造函数时,就将那个构造函数变成了自己的构造函数,也可以在其中加入自己的定义。,studentson类继承自student类:,22,抽象类及在继承中的特点,1、抽象类及抽象方法的介绍 所谓抽象类,也就是不能被实例化的类。 以abstract修饰的方法称抽象方法,抽象方法只有方法头而无方法体,连大括号也没有,格式如

16、下: abstract 返回值类型 方法名(形参); /是否有形参根据具体情况 例如:abstract float sort(float a);,23,继承抽象类的抽象方法,对于父类中的抽象方法,是通过覆盖的形式来实现继承的(注意是覆盖不是重载)。就是在子类中定义一个与抽象方法有相同方法头的方法,并完成方法体的定义。 抽象类中可能有许多抽象方法,它的子类必须实现所有这些方法,否则它的子类就仍然是抽象类。,24,6.4 接口interface P135,只靠单重继承有时是不能解决一些复杂关系的,例如: Java中并不允许多重继承,所以Java提供了接口(interface)来解决这类问题。,25

17、,P113 例6.12,属性 方法 abstract void parameter(); abstract void area();,属性 double r string c 方法 circle(u,v) void parameter() /实现 void area()/实现,继承,interface graphics,circle,rectangle,属性 double h,w 方法 rectangle(u,v) void parameter()/实现 void area()/实现,继承,26,接口是用来实现类似多重继承功能的一种结构,它在语法上和类很相似,它也有属性和方法,接口间也可以形成

18、继承关系。 接口和抽象类的区别: (1)接口的属性都是常量(系统默认:public static final ) ,方法都是抽象方法,没有方法体,不能有非抽象的方法。 (2)抽象类可以包含抽象方法和非抽象方法,它的属性没有什么特殊要求。,27,6.4.1 接口的定义,接口的定义格式如下: public interface 接口名 extends 父接口名1,父接口名2, public static final 属性数据类型 属性名1 = 值; ; public abstract 返回值类型 方法名(形参表)throw 例外名列表; ; 关键字interface表示接口的定义,前面的public

19、是访问控制符,public表示它可以被不同包中的类或接口使用,还有一个是默认friendly。 关键字extends引导的内容是该接口的父接口。,28,用大括号括起的内容是接口体,它包括两部分:属性和方法。 关键字throw引导的是关于方法运行时可能产生的例外。 属性:接口的属性都是常量,必须是public static final 修饰,这是系统默认的(也可以不写)。 方法:系统默认为public abstract修饰,一般省略不写,这些方法是公共抽象方法,没有方法体,不能有大括号,接口中不能有非抽象方法。 一个接口可以没有任何接口体,但大括号不能省略 例如: public interfac

20、e Marker ,29,例:StockWatcher接口的定义 public interface StockWatcher public static final String sunTicker = SUNW; public static final String oracleTicker = ORCL; public static final String ciscoTicker = CSCO; void valueChanged(String tickerSymbol, double newValue); ,30,6.4.2 接口的实现,由于接口中的方法都是抽象方法,所以接口定义完之后

21、,必须在某个类中对这个接口的方法进行具体化,这时的方法就不能是抽象的了,我们称这个过程为某个类实现了某个接口,或接口的实现。 一个类要实现某个接口,必须在类的定义时用关键字implements来声明,实现接口必须实现该接口的全部方法(包括该接口的所有父类的方法),否则必须将该类申明为abstract类。 被实现的方法的访问控制符必须显式地使用public修饰,因为接口的方法都是public的。,31,P135 实例5.9,32,6.5 包,包的概念: 包是由.class文件组成的一个集合。 Java是一种面向对象的语言,它的特点就是重用,包就是组织和管理.class文件的一种工具。 包是一种松

22、散的概念,一般情况下,功能相同或者相关的类(实际上就是将.class文件组织在一起)组织在一个包中,总之,包是一种以某种规则组织类的工具。 包的三个作用:P129 使得功能相关的接口和类易于查找和引用; 避免类名冲突,不同包中的类可以同名; 提供重用权限的控制机制,类的一些访问权限以包围访问范围。,33,2、包的引用 用import语句就可以引入所需的公共类 例如:import java.io.*; 这个语句表示java.io中所有的公共类被引入当前包。 还有一种方法使用某个包中的类,就是在程序中写全它的包名(即书上的指明类所在的路径),但这样显得很麻烦,而不使用import语句。 例如: j

23、ava.io.FileInputStream in = new java.io.FileInputStream(); 系统默认引入包:java.lang ,6.5.1 包的引用,34,3、把Java提供的这些包(见表)粗略地介绍一下,在编程过程中可以根据自己的需要来查阅相应的资料。其中,包名后面带“.*”的表示其中包括一系列相关的包。p145,36,6.5.2 包的创建和使用,步骤: 包的创建,在源程序的第一行:package 包名,并将程序存为文件f1.java; 建立一个专门存放自定义包的目录:f:hanclass,将之连接到环境变量classpath里; javac d f:hancla

24、ss f1.java 将编译的class文件存于f:hanclass包名中; 此时在别的文件中要使用f1.class这个类,只要在源程序中第一行:import 包名.f1; 注:此时我们可以将所有的自定义类放在自定义的包中,可以将这个包中的自定义类像java标准类库中的类一样使用。,37,/环境变量classpath .;D:Program FilesJavajdk1.5.0_09lib;f:hanclass package han; public class point private int x,y; public point() public point(int x,int y) thi

25、s.x=x; this.y=y; public void setx(int a) x=a; public void sety(int a) y=a; public int getx() return x; public int gety() return y; ,38,编译javac -d f:hanclass point.java,此时point.class将存于f:hanclasshan中; import han.point; public class mpoint public static void main(String args) point a=new point(); point p=new point(3,5); p.setx(6); System.out.println(p点间的坐标x,y为:+p.getx()+,+p.gety(); System.out.pr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论