收藏 分享(赏)

Java语言第4章.ppt

上传人:hwpkd79526 文档编号:8434002 上传时间:2019-06-26 格式:PPT 页数:45 大小:200.50KB
下载 相关 举报
Java语言第4章.ppt_第1页
第1页 / 共45页
Java语言第4章.ppt_第2页
第2页 / 共45页
Java语言第4章.ppt_第3页
第3页 / 共45页
Java语言第4章.ppt_第4页
第4页 / 共45页
Java语言第4章.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

1、第5章 多态与继承,在 Java 中,类是一个层次结构,其中有一个被称为Object的特殊超类,所有的类都直接或间接地继承Object类子类继承父类的属性和方法,同时也可以修改父类的属性或重载父类的方法,以及在父类的基础上添加新的属性和方法。因此,父类和子类 之间反映的是“一般与特殊”的关系,子类的定义格式 修饰符 子类名 extends 父类名 类体; 注意 没有extends,默认父类为Object 只能有一个父类,即单继承 子类继承父类的全部成员 类继承具有传递性,例1:ClassInheritance.javaclass B int b1 = 1;public int b2 = 2;p

2、rotected int b3 = 3;private int b4 = 4;int getb4( ) return b4; class A extends B int a = 5;int Sum( ) return b1 + b2 + b3 + getb4( ) + a ; ,class ClassInheritance static public void main(String arg ) B bb = new B( );System.out.println(“B: “+bb.b1+“ “+bb.b2+“ “+bb.b3+“ “+bb.getb4( );A aa = new A( );S

3、ystem.out.println(“A: “+aa.b1+“ “+aa.b2+“ “+aa.b3+“ “+aa.getb4( ) + “ “+aa.a + “ “ + aa.Sum( ) ); ,class B int b1 = 1;public int b2 = 2;protected int b3 = 3;private int b4 = 4;int getb4( ) return b4; void setb4( int i ) b4 = i; class A extends B int a = 5; ,class C extends A int c = 6;void change( i

4、nt increase ) b1 += increase;b2 += increase;b3 += increase;setb4 ( getb4( ) +increase );a += increase;c += increase; ,例2:CPP.java,class CPP static public void main(String arg ) C cc = new C( );System.out.println(“C: “+cc.b1+“ “+cc.b2+“ “+cc.b3+“ “+cc.getb4( ) +“ “+cc.a+“ “+cc.c);cc.change( 15 );Syst

5、em.out.println(“C: “+cc.b1+“ “+cc.b2+“ “+cc.b3+“ “+cc.getb4( ) +“ “+cc.a+“ “+cc.c); ,例3类继承的访问权限nheritance.java,import java.io.*;class A int a1=2; public int a2=4; private int a3=6; protected int a4=8;void access( ) System.out.println(“Calss A:”); System.out.println(“friendly element = ”+ a1); System

6、.out.println(“pubilc element = ”+ a2); System.out.println(“private element = ”+ a3); System.out.println(“protected element = ”+ a4); ,int geta3( ) return a3; class B extends A void access( )System.out.println(“Calss B:”);System.out.println(“friendly element = ”+ a1);System.out.println(“pubilc elemen

7、t = ”+ a2);System.out.println(“protected element = ”+ a4);A p = new A( );System.out.println(“Calss A-Class B:”);System.out.println(“friendly element = ”+ p.a1);System.out.println(“pubilc element = ”+ p.a2);System.out.println(“protected element = ”+ p.a4); ,public class inheritance public static void

8、 main(String arg ) A p = new A( );p.access( );System.out.println(“private element = ”+ p.geta3( );B q = new B( ); q.access( );System.out.println(“private element = ”+ q.geta3( );,例4 类继承的传递性example.java,import java.io.*; class A int a1=2;public int a2=4;private int a3=6;protected int a4=8;int geta3(

9、)return a3; class B extends A int b=10;,class C extends B int c=12;void add( )a1+; a2+; a4+; b+;c+;class example public static void main(String arg )C s = new C( );System.out.println(s.a1+“”+s.a2+“ ”+s.geta3( )+“ ”+ s.a4 +“ ”+ s.b +“ ”+ s.c);s.add( );System.out.println(s.a1+“”+s.a2+“ ”+s.geta3( )+“

10、” + s.a4 +“ ”+ s.b +“ ”+ s.c); ,子类与父类的属性与方法,子类继承父类的所有内容,但父类中的private部分不能直接访问 子类中新增加的属性和方法是对父类的扩展 子类中定义的与父类同名的属性是对父类属性的隐藏,同名的方法是对父类方法的重载或覆盖,4。this与super (1) this代表当前对象本身,准确地说,代表了对象本身地一个引用,即对象地另一个名字。一般this用来把当前对象的引用作为参数传递给其他的对象或方法。 import java.awt.event.*; public class getDuoble extends Applet impleme

11、nts ActionListener Label prompt;TextField input;double d=0.0;,public void init()prompt =new Label(“请输入一个浮点数:“);input = new TextField(10);add(prompt);add(input);input.addActionListener(this);public void paint(Graphics g)g.drawString(“你输入了数据:“+d,10,50);,public void actionPerformed(ActionEvent g)d=Doub

12、le.valueOf(input.getText().doubleValue();repaint(); 这里this就是将当前getDuoble 类的对象指定为调用addActionListener()方法的实际参数。 (2)super 代表当前对象直接父类对象,是当前对象直接父类对象的一个引用。,如在class D200_Card extends Number_PhoneCard 中定义: double getBalance() return super.balance; 其返回值为0.0。因为balance不是Number_PhoneCard定义的域,而是从PhoneCard中继承的域。,

13、(3)父类对象和子类对象的转换 子类对象转换为父类对象时,可以用显式或隐式实现,即子类对象可以直接向父类对象赋值; 父类对象向子类对象赋值时,必须使用显式转换,即强制类型转换。,class A String s = “class : A“; class B extends A String s = “class : B“; ,class TypeV static public void main(String arg)B b1,b2 = new B( );A a1,a2;a1 = (A)b2;a2 = b2;System.out.println(a1.s);System.out.println

14、(a2.s);b1 = (B)a1;System.out.println(b1.s); ,隐藏成员变量和方法重载 :子类除了可以增加属于自己的、父类中没有的成员变量和方法,还可以重新定义父类中的成员变量和方法。 方法重载:参数表必须不同,即参数个数不同或者参数类型不同,使得系统能够正确调用所需执行的方法。返回类型则没有严格的要求,可以不同也可以相同。 覆盖:是指子类中新增加的成员变量或者方法与父类中的成员变量或方法同名,但是功能不同。 方法重载和方法覆盖不同 :方法重载是表示父类和子类或者同一类中有多个相同名字的方法,但是参数表不同;方法覆盖则表示父类和子类中具有相同名字,相同参数表的方法。,

15、5. 5 构造函数的继承和重载 1. 构造函数的重载 D200_Card() D200_Card(long cn)cardNumber=cn; D200_Card(long cn,int pw)cardNumber=cn;password=pw;,D200_Card(long cn,int pw,double b)cardNumber=cn;password=pw;balance=b; D200_Card(long cn, int pw, double b,String c)cardNumber=cn;password=pw;balance=b;connectNumber=c;,构造函数可相互

16、调用,如: D200_Card(long cn,int pw, double b,String c)this(cn, pw, b)connectNumber=c; 2. 构造函数的继承规则: (1)无条件继承父类不含参数的构造函数。 (2)如果子类自己定义了构造函数,创建新对象时,它将先执行继承父类的无参数构造函数,然后再执行自己的构造函数。 (3)对于父类含参数构造函数,子类可以通过再自己的构,造函数中使用super关键字调用它,但这个调用语句必须是子类构造函数的第一个可执行语句。 Number_PhoneCard() Number_PhoneCard(long cn)cardNumber=

17、cn; Number_PhoneCard(long cn,int pw)cardNumber=cn;password=pw;,Number_PhoneCard(long cn,int pw,double b)cardNumber=cn;password=pw;balance=b; Number_PhoneCard(long cn,int pw,double b,String c)cardNumber=cn;password=pw;balance=b;connectNumber=c;,子类D200_Card构造函数有如下设计方法: (1)不专门定义自己的构造函数。创建新对象时,系统自动调用父类N

18、umber_PhoneCard无参数的构造函数。 (2)定义自己的构造函数并调用父类含参数的构造函数。子类再父类构造函数定义的初始化基础上,定义子类自己的初始化操作。 D200_Card(long cn,int pass,double b, double a)super(cn,pass,b)additoryFee=a; (3)在子类实现构造函数的重载。可满足多层次的对象初始化。,D200_Card(long cn, int pw, double a)super(cn,pw,b)additoryFee=a; (4)在子类实现构造函数的重载。可满足多层次的对象初始化。 D200_Card(long

19、 cn,int pw,double d,String c , double a)super(cn,pw,b,c)additoryFee=a;,5. 6 包是一种松散的类的集合,象文件夹把文件组织在一起,使其结构清晰、有条理。在缺省情况下,同一包中类可以相互访问 。 1。创建包在缺省情况下,系统会创建一个无名包,但不可为其他包所引用。创建包使用关键字package,它必须是.java的第一个语句。package 包名; 如: package CardClass;/ CardClass文件夹package CardSystem.CardClass;/CardSystem/CardClass文件夹,

20、1。包的引用 (1)使用包名、类名前缀对于在同一包其他类,使用其方法和域时应加上类名;对于在其他包中的类,需要在类名前加上包名前缀。 如: CardClass.D200_Card my200=new CardClass.D200_Card (); (2)加载需要使用的类上面每当D200_Card出现时,必须加上包名前缀。非常麻烦,解决方法:import CardClass.D200_Card; 直接定义: D200_Card my200=new D200_Card ();,(3)加载整个包上面语句只加载了一个类。可以加载整个包。方法为:import CardClass.*;import jav

21、a.awt.*; (4)CLASSPATH在一个程序找不到所需要的类时,自动按照CLASSPATH环境变量所指明的路径寻找。设置 方法有两个: 在AUTOEXEC . BAT中或DOS命令中使用下列语句:SET CLASSPATH=.;c:jdklib;c:jdklib.classes.zip 使用java解释器的开关参数classpath 如:java text- classpath c:temp(回车)/ text在c:temp,5.7 接口 1。接口概述与类相似,它定义了若干抽象的方法和常量,形成一个 属性集合,通常对应一组功能,可实现 多重继承。把用于完成特定功能的若干属性组织成一个相

22、对独立的属性集合;凡是需要实现这种特定功能的类,都可以继承这个属性集合并在类内使用它,这个属性集合就是接口。接口只是实现一组特定功能的对外接口和规范,并没有真正实现这个功能。要由类在继承时,具体实现这个功能。,2。声明接口声明接口的语法如下: public interface 接口名extends 父接口名列表 /接口体/常量域声明publicstaticfinal域类型 域名=常量值;/抽象方法声明publicabstractnative返回值 方法名(参数 列表)throw 异常列表; 由此可见,接口可以理解为一种特殊的类。,系统定义的接口DataInput public interfac

23、e java.io.DataInput public abstract long readLong();public abstract short readShort();public abstract char readChar();public abstract double readDouble ();public abstract float readFloat();public abstract void readFull(byte b);public abstract void readFull(byte b, int off, int len);,public abstract

24、int readInt();public abstract String readLine()public abstract long readLong();public abstract short readShort();public abstract int readUnsignedByte ();public abstract int readUnsignedShort (); public abstract String readUTF();public abstract int skipBytes(int n); 调用:public class Class1 extends jav

25、a.io.DataInput,3。实现接口将接口中抽象的方法在某类中定义为具体方法。 注意: (1)用implements关键字指出要实现的接口。 (2)如果要实现的接口的类不是abstract 抽象类, 在类的定义部分必须实现指定接口的所有抽象方法。 (3)如果要实现的接口的类是abstract抽象类,可以不实现指定接口的所有抽象方法,但它的非抽象子类必须有实在的方法体。 (4)一个类实现某接口的抽象方法时,必须使用完全的方法头。 (5)接口中指定public的抽象方法,在类中实现时,必须显式说明。,import java.applet.*; import java.awt.*; impor

26、t java.awt.event.*; public class ImplementActionListener extends Applet implements ActionListener TextField password = new TextField(“我是密码“);Button btn = new Button(“隐藏“);public void init(),add(password);add(btn);btn.addActionListener(this); public void actionPerformed(ActionEvent e)password.setEcho

27、Char(*);password.selectAll(); ,5.2 Java的继承 1。派生子类 通过exyends关键字实现。子类可继承所有非private的属性和方法为自己的成员。 import java.util.Date; abstract class PhoneCard/电话卡 double balance;/剩余金额abstract boolean performDial();/打电话double getBalance() /得到剩余金额return balance; ,/无卡号电话卡 abstract class None_Number_PhoneCard extends Ph

28、oneCard String phoneSetTYpe ; /电话机型号String getSetType()return phoneSetTYpe; ,/有卡号电话卡 abstract class Number_PhoneCard extends PhoneCard long cardNumber;/卡号int password;/密码String connectNumber;/接入号码boolean connected;/接通boolean performConnection(long cn,int pw), if(cn=cardNumber ,/电话磁卡 class magCard ex

29、tends None_Number_PhoneCard String usefulArea;/使用地域boolean performDial()if(balance0.9)balance -=0.9;return true;elsereturn false; ,/电话IC卡 class IC_Card extends None_Number_PhoneCard boolean performDial()if(balance0.9)balance -= 0.9;return true;elsereturn false; ,/IP卡 class IP_Card extends Number_PhoneCard Date expireDate;/失效日期boolean performDial()if(balance0.3 ,/200卡 class D200_Card extends Number_PhoneCard double additoryFee;/附加费boolean performDial()if(balance0.5+additoryFee)balance -=(0.5+additoryFee);return true;elsereturn false; ,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报