欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    程序设计基础Java程序设计.ppt

    • 资源ID:6596225       资源大小:1.47MB        全文页数:49页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    程序设计基础Java程序设计.ppt

    第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;/新添加数据成员heartRatepublic 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(我是儿子+super.name+,小名是+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/子类Bpublic 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 Apublic void f()public class B extends Apublic int f(int)public int f(double),6.2 Java类的多态,6.2.2 方法覆盖,方法覆盖:允许子类对父类中方法重新进行定义(方法名和参数类型、个数、顺序不变)。,6.2 Java类的多态,【例6-4】方法覆盖的使用。,class Circlepublic final double PI=3.1415926;/定义常量PIint 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 Testpublic 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 Basefinal 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 Circleint 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 Teststatic 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中可以将自己写的类,按一定的方法归属于不同的子目录(包)中。,包的定义,例:package com.chapter06;/将Student类存放在当前目录的comchapter06子目录中public class Student例:package Base;/将该类存放在当前目录的Base目录中public class Base0 public int public_data=2;private int private_data=3;protected int protected_data=4;,6.6 包,import语句位于package语句之后、类的定义之前,其语法格式如下:import 包名1.包名2.(类名|*);,6.6.2 包的引用,6.6 包,(1)import java.applet.Applet;/引入java.applet包中的Applet类(2)import java.awt.*;/引入java.awt包中的所有的类(3)import java.awt.event.*;/引入包中的所有类(4)import java.util.Date;/引入java.util包中的Date类,例:,java.lang包是Java的核心类库,它包含了运行Java程序必不可少的系统类。在运行程序时,系统自动引入java.lang包中的所有类,不需要显式地使用import语句引入该包中的所有类。,6.6 包,回目录,6.7综合运用实例,【实例6】问题描述:本实例是利用接口技术实现一个简单缴费系统的例子。程 序要求根据用户提供的手机号和缴费金额返回缴费后的相关信息。,问题实现:在本实例中,定义了主类PhoneFee、用户个人信息类PersonalFeeInfo、接口FeeSystem和实现这个接口的两个类MobileFeeSystem和UnicomFeeSystem。其中主类中假定有三个用户进行缴费操作,他们需要提供手机号码和缴费金额,系统会根据他们的手机号码来判断应该向Mobile公司或Unicom公司缴费,如果缴费成功则提供相关信息;也可能由于他们的号码不存在于这两家公司的用户信息中导致其无法缴费。另外,接口FeeSystem提供了抽象方法pay,所以实现它的两个类MobileFeeSystem和UnicomFeeSystem均需实现这个抽象方法,但实现的细节可以由这两家公司自行控制。实例6实现代码:略,6.7综合运用实例,回目录,

    注意事项

    本文(程序设计基础Java程序设计.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开