已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章 Java继承、接口和包,6.1 Java类的继承 6.2 Java类的多态 6.3 抽象类及抽象方法 6.4 final类及final成员 6.5 接口 6.6 包 6.7综合运用实例,6.1 Java类的继承,语法格式: 访问控制符 修饰符 class 子类名 extends 父类名 子类新添加数据成员定义、方法成员定义; ,6.1.1 子类的声明方式,例: class Animal /动物类 public float weight; /重量 public void eat ()/吃 class Mammal extends Animal /哺乳动物类 public int heartRate; /新添加数据成员heartRate public void breathe() /新添加方法成员breathe ,6.1 Java类的继承,Java类的继承层次结构中,类Object是最顶级的类,它是Java中所有类的根类,它在java.lang包中定义。,6.1 Java类的继承,class Cat extends Mammal/猫类 boolean longhair; /新添加数据成员 public void purr() /新添加方法成员 ,6.1.2 子类对象的创建,【例6-1】 定义父类Father和子类Son,在主类Test中创建各自对象并访问父类对象和子类对象。,class Father /父类Father String name; public void Set_Name(String sn)/设置姓名 name=sn; public void Father_Access() System.out.println(“我是父亲“+name); ,6.1 Java类的继承,class Son extends Father/儿子类Son String nickname; /新添加成员nickname描述儿子的小名 public void Set_NickName(String sn) /新添加成员 nickname=sn; public void Son_Access() /访问儿子 System.out.println(“我是儿子“+name+“,我的小名是“+nickname); ,6.1 Java类的继承,public class Test public static void main(String args) Father fat=new Father(); /子类对象定义和初始化 fat.Set_Name(“彭政“); /设置父亲姓名 Son son=new Son(); son.Set_Name(“彭龙“); /设置儿子姓名 son.Set_NickName(“龙龙“); /设置儿子小名 fat.Father_Access(); /访问父亲对象 son.Son_Access(); /访问儿子对象 ,6.1 Java类的继承,程序执行结果: 我是父亲彭政 我是儿子彭龙,我的小名是龙龙,6.1 Java类的继承,父类对象fat和子类对象son,6.1 Java类的继承,6.1.3 子类的构造方法,创建子类对象分两步, 首先调用父类构造方法创建好父类部分并初始化, 之后调用子类构造方法创建新添加成员部分并初始化。 在子类内部可以通过super关键字来访问父类中的成员,包括父类构造方法。,6.1 Java类的继承,【例6-2】构造方法的调用。,class Father /父类Father String name; /姓名 int age; /年龄 public Father(String sn,int a) /父类构造方法 name=sn;age=a; public void Father_Access() System.out.println(“我是父亲”+name+“,今年“+age+“岁了“); ,6.1 Java类的继承,class Son extends Father /儿子类Son String nickname; /小名 Son(String n1,String nickname,int age)/子类构造 方法 super(n1,age); /调用父类构造方法 this.nickname=nickname; public void Son_Access() System.out.println(“我是儿子“++“,小名是“+nickname+ “,今年“+super.age+“岁了“); ,6.1 Java类的继承,public class Test public static void main(String args) Father fat=new Father(“彭政“,37); /子类对象定义和初始化 Son son=new Son(“彭龙“,“龙龙“,10); fat.Father_Access(); son.Son_Access(); 程序执行结果: 我是父亲彭政,今年37岁了 我是儿子彭龙,小名是龙龙,今年10岁了,6.1 Java类的继承,Java中只能使用super关键字调用父类构造方法,使用方法是: super( 父类构造方法中的实际参数 ),使用super调用父类构造方法时注意super语句只能是子类构造方法中的第一条语句,否则编译出错。另外,虽然super语句写在子类构造方法中,但却不是由子类构造方法调用,而是由系统调用。,6.1 Java类的继承,除了通过super调用父类的构造方法之外,还可以通过super访问父类部分的成员,其使用格式是如下: super.数据成员 或 super.方法成员名( 实际参数表 ),6.1 Java类的继承,Java编译器为每个对象定义了一个特殊数据成员this,该成员属于引用到对象本身。因此可以在类中通过this访问对象本身的各种成员。,6.1.4 在子类中访问父类中的成员,子类和父类同包时: 父类中非private成员可以在子类中随意访问。 子类和父类不同包时: 父类中只有public、protected成员可以在子类中访问。,6.1 Java类的继承,【例6-3】对父类成员的访问。,class A /父类A public int a=2; /父类的公共成员a private int b=3; /父类的私有成员b protected int c=4; /父类的保护成员c int x; /默认访问控制成员 public A() /无参构造方法 public int outputB() return b; /公共方法outputB ,6.1 Java类的继承,public class B extends A /子类B public int d; /子类新添加公共成员d public void testVisitControl() System.out.println(“父类子类同包时对父类中各种访问控制成 员的访问:“); System.out.println(“访问父类中的public成员a=“+a); System.out.println(“直接访问父类中的private成员b将导致编译出错!“); System.out.println(“利用父类的公共接口outputB可以成功n访问父类中 的private成员b=“+outputB(); System.out.println(“访问父类中的protected成员c=“+c); System.out.println(“访问父类中的默认访问控制成员X=“+x); ,public static void main (String args) B b=new B(); b.testVisitControl(); ,6.1 Java类的继承,回目录,6.2 Java类的多态,6.2.1 方法重载,方法重载: 在一个类中有多个方法具有相同的名字,但是这些方法的参数的个数、类型或顺序不同。 通常情况,需要在同一个类中定义几个功能类似但参数不同的方法时可以用到方法重载。 同一类中可以对方法进行重载,在继承层次中同样可以进行方法重载。,例: class A public void f() public class B extends A public int f(int) public int f(double) ,6.2 Java类的多态,6.2.2 方法覆盖,方法覆盖: 允许子类对父类中方法重新进行定义(方法名和参数类型、个数、顺序不变)。,6.2 Java类的多态,【例6-4】方法覆盖的使用。,class Circle public final double PI=3.1415926;/定义常量PI int r;/定义圆半径 double Area() /计算圆的面积 return PI*r*r; double Length() /计算圆的周长 return 2*PI*r; Circle(int r) this.r=r; ,6.2 Java类的多态,class Cylinder extends Circle int h;/定义圆柱体的高 double Area() /覆盖父类中的Area方法 return Area(0.0)+Area(0);/底面积+侧面积 double Area(int i) /计算圆柱体底面积 return 2*super.Area(); double Area(double d) /计算圆柱侧面积 return super.Length()*h; double Volume()/计算圆柱体的体积 return super.Area()*h; . ,6.2 Java类的多态,public class Test public static void main(String args) Circle cir=new Circle(10); Cylinder cy=new Cylinder(20,10); System.out.println(“半径为”+cir.r+“的圆面积是: “+cir.Area(); System.out.println(“底面半径为“+cy.r+“高为“+cy.h+ “的圆柱体上下底面积是:“+cy.Area(0); System.out.println(“底面半径为“+cy.r+“高为“+cy.h+ “的圆柱体侧面积是:“+cy.Area(0.0); System.out.println(“底面半径为“+cy.r+“高为“+cy.h+ “的圆柱体表面积是:“+cy.Area(); System.out.println(“底面半径为“+cy.r+“高为“+cy.h+ “的圆柱体体积是:“+cy.Volume(); ,6.2 Java类的多态,程序执行结果: 半径为10的圆面积是:314.15926 底面半径为20高为10的圆柱体上下底面积是:2513.27408 底面半径为20高为10的圆柱体侧面积是:1256.63704 底面半径为20高为10的圆柱体表面积是:3769.91112 底面半径为20高为10的圆柱体体积是:12566.3704,6.2 Java类的多态,注意: 1、要指明调用父类中的同名覆盖方法需使用super关键字。 2、在继承层次上的所有同名覆盖方法一般应该保持相同的访问控制符。,回目录,6.3 抽象类及抽象方法,6.3.1 抽象类和抽象方法的定义,抽象方法: 用abstract修饰,同时没有方法体的方法。 抽象类: 使用关键字abstract定义类,在该类中至少存在一个以上的抽象方法。,例: abstract class Shape /图形抽象类 abstract double Area(); /抽象方法,计算面积 public abstract class Vehicle /车辆抽象类 protected int weight; public abstract void Setup(); /抽象方法,启动 ,6.3 抽象类及抽象方法,6.3.2 抽象类和抽象方法的使用,【例6-5】使用抽象类和抽象方法。,abstract class Shape /抽象类Shape abstract double area(); /抽象方法Area abstract void print(); /抽象方法print class Circle extends Shape public final double PI=3.1415926; /定义常量PI int r;/定义圆半径 double area() /计算圆的面积,实现父类的抽象方法Area return PI*r*r; int GetR()return r; void print() /实现父类的抽象方法print System.out.print(“半径为“+r+“的圆“); ,6.3 抽象类及抽象方法,class Cylinder extends Circle int h; /定义圆柱体的高 double area() /计算圆柱体的表面积 return area(0.0)+area(0); /底面积加侧面积 double area(int i) /计算圆柱体底面积 return 2*super.area(); double area(double d) /计算圆柱侧面积 return super.Length()*h; void print() System.out.print(“半径为“+r+“高为“+h+“的圆柱体“); ,6.3 抽象类及抽象方法,public class Test static void Print(Shape sh) /使用抽象类Shape作为参数 sh.print(); static double Area(Shape sh) return sh.area(); public static void main(String args) Shape sh; /使用抽象类定义数组 sh=new Shape2;/创建两个抽象类Shape引用变量 sh0=new Circle(10); /第0个数组元素引用到圆对象 sh1=new Cylinder(20,10);/第1个数组元素引用到圆柱体对象 Print(sh0); System.out.println(“面积是:“+Area(sh0); Print(sh1); System.out.println(“的表面积是:“+Area(sh1); ,6.3 抽象类及抽象方法,6.3 抽象类及抽象方法,回目录,例6-5在主类Test中使用了抽象类数组引用变量,其中第0个元素引用到Circle对象,第1个元素引用到了Cylinder对象,这在Java中是允许的,即允许父类引用变量引用到子类对象。 若B是A的子类,则语句 A a=new B(); 是合法的。,6.4 final类及final成员,final关键字可以修饰类、成员变量和成员方法及方法中的参数。 在类定义前加上final,成为最终类. 如: final class A /final类 ,在方法定义前加上final,成为最终方法 。 例如: class B int a; final void print(int x) /final 方法 System.out.println(x); ,6.4 final类及final成员,父类中定义的最终方法就不能被子类覆盖。,例: class Base final int x=1; final void print(int y ) / 父类中的final方法,不允许被子类覆盖 System.out.println(x+y); class Derived extends Base void print(int y ) /错误,对父类中的final方法进行覆盖 System.out.println(2*x+y); ,6.4 final类及final成员,用final修饰的变量称为最终变量(常量)。在实例变量、局部变量和方法的形参定义之前加上final,那么这个变量值只能被引用,而不能被修改。final修饰的局部变量和实例变量必须给出初值,因为它修饰的变量代表一个常量。,6.4 final类及final成员,综上所述, 如果一个类被修饰为final类,则它不能被继承,即不能有子类; 如果一个方法被修饰为final方法,则这个方法不能被覆盖; 如果一个成员变量被修饰为final变量,定义时必须赋给初值,同时值不会再发生变化; 如果方法的参数被修饰为final参数,该参数的值不能被修改。,回目录,6.5.1 接口的定义,6.5 接口,定义一个接口的语法格式: public interface 接口名 extends 父接口列表 最终变量声明; 抽象方法声明; ,interface Printable /接口Printable final int MAX=100; /最终变量声明 void add(); /抽象方法声明 float sum(float x ,float y); /抽象方法声明 ,例:,接口和抽象类的相同点有: (1)都包含抽象方法,都必须在非抽象子类中实现这些方法。 (2)都可以通过继承机制创建子类。 (3)都可以具有public属性。 (4)都不能用new关键字来创建这两种类型的对象。 接口和抽象类的不同点有: (1)在抽象类中,抽象方法必须加abstract关键字,而在接口中不需要。 (2)在抽象类中,除抽象方法外,可以定义实例变量和非抽象方法,而在接口中,只能定义最终变量和抽象方法。 (3)接口允许多继承,抽象类仅支持单继承。,6.5 接口,6.5.2 实现接口,6.5 接口,实现接口时类的声明格式为: 修饰符 class 类名 extends 父类名 implements 接口名1 ,接口名2 类体 ,interface inter / 接口inter void methodA( ); abstract class Derived1 implements inter ,例如:,class Derived2 extends Derived1 public void methodA( ) / 实现方法 System.out.println(“Hi,methodA“); ,6.5 接口,注意: 一个类如果要实现一个或几个接口,必须在类定义体中实现这些接口中的所有抽象方法,【例6-7】将【例6-5】中的抽象类该为接口来实现,程序执行结果不变。,interface Shape /定义接口Shape public double Area(); /抽象方法Area public void print(); /抽象方法print class Circle implements Shape /类Circle实现接口 public final double PI=3.1415926; / /定义常量PI int r;/定义圆半径 public double Area() /计算圆的面积,实现父类的抽象方法Area return PI*r*r; public void print() /实现父类的抽象方法print System.out.print(“半径为“+r+“的圆“); ,6.5 接口,class Cylinder extends Circle int h;/定义圆柱体的高 public double Area()/计算圆柱体的表面积 return Area(0.0)+Area(0);/底面积加侧面积 double Area(int i)/计算圆柱体底面积 return 2*super.Area(); double Area(double d)/计算圆柱侧面积 return super.Length()*h; double Volume()/计算圆柱体的体积 return super.Area()*h; public Cylinder(int r,int h) super(r);/父类构造方法调用 this.h=h; public void print() System.out.print(“半径为“+r+“高为“+h+“的圆柱体“); ,6.5 接口,public class Test static void Print(Shape sh) /使用抽象类Shape作为参数 sh.print(); static double Area(Shape sh) return sh.Area(); public static void main(String args) Shape sh; /使用抽象类定义数组引用变量 sh=new Shape2; sh0=new Circle(10); /第0个元素引用到圆对象 sh1=new Cylinder(20,10); /第1个元素引用到圆柱体对象 Print(sh0); System.out.println(“面积是:“+Area(sh0); Print(sh1); System.out.println(“的表面积是:“+Area(sh1); ,6.5 接口,回目录,6.6 包,声明包的格式是: package pkglpkg2pkg3. ;,声明一个包时,声明语句必须放在类所有语句的最前面(注释除外)即源文件的第一条。在缺省情况下,Java将所有的类归属一个缺省无名包中。在不同的包中可以有同名的类存在。如果源程序中省略了package语句,源文件中定义的类被隐含地认为是缺省无名包的一部分(即当前目录中)。 包名可以是一个合法的标识符,也可以是若干个标识符以“.”分割而成。在Java中可以将自己写的类,按一定的方法归属于不同的子目录(包)中。,6.6.1包的定义,例: package com.chapter06; /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 关于产业与企业的试卷及答案
- 区后备干部笔试考试题目及答案
- CN119403164A 一种ldmos器件的制备方法、ldmos器件 (合肥晶合集成电路股份有限公司)
- 新教材高中生物 第3章 基因的本质 第3节 DNA的复制 第4节 基因通常是有遗传效应的DNA片段教案 新人教版必修2
- 七年级历史下册 第三单元 明清时期:统一多民族国家的巩固与发展 第18课 统一多民族国家的巩固和发展教学设计 新人教版
- 英语周报2025年高中英语 Unit3 The secret of success Reading教学设计 牛津译林版选修11
- 冀教版(一年级起点)Unit3WelovesportsLesson18Afamousfootballplaye教案
- 探秘情感测试题及精准答案解析
- 净水处理工测试题与答案解析
- 七年级生物下册 第五单元 第11章 地面上的生物 第2节 地面上的动物教学设计(1)(新版)苏科版
- 2026年全国公共营养师之二级营养师考试专项特训题(附答案)
- 工程咨询机构档案归档管理规范
- 2026福建泉州交发集团(第一批)校园招聘89人笔试备考题库及答案详解
- 基于大单元教学的生物教学设计:以遗传规律为例
- 2026-2031年中国电水壶行业市场调查分析与发展战略研究报告
- 2026年广东省中考语文试卷(含详细答案解析)
- 共创健康无烟校园守护青春美好未来
- 颌下腺肿瘤诊疗专家共识(2026版)
- 2025年度中国展览数据统计报告
- 安全生产规章制度汇编2026版
- 2026年高考(浙江卷)英语试题及答案
评论
0/150
提交评论