【教学课件】第8章接口、继承和多态.ppt
《【教学课件】第8章接口、继承和多态.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第8章接口、继承和多态.ppt(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第8章章 接口、继承和多态接口、继承和多态本章要点本章要点u掌握接口的使用掌握接口的使用u掌握类的继承掌握类的继承u掌握使用掌握使用super关键字关键字u了解什么是多态了解什么是多态第第8章章 接口、继承和多态接口、继承和多态n n8.1 接口的使用接口的使用n n8.2 类的继承类的继承n n8.3 多态多态n n8.4 Object类类n n8.5 对象类型的转换对象类型的转换n n8.6 instanceof判断对象类型判断对象类型主要内容主要内容8.2 类的继承类的继承n8.2.1 继承的实现继承的实现n8.2.2 继承中的重写继承中的重写n8.2.3 使用使用super关键字关键
2、字8.2.1 继承的实现继承的实现n继承是指一个类的定义可以基于另外一个已继承是指一个类的定义可以基于另外一个已经存在的类,即子类基于父类,从而实现父经存在的类,即子类基于父类,从而实现父类代码的类代码的重用重用。nJava中只允许每个子类拥有中只允许每个子类拥有一个一个直接父类直接父类,即单继承。即单继承。n在在Java语言中,继承通过关键字语言中,继承通过关键字extends来来实现。即在子类的声明中,通过使用关键字实现。即在子类的声明中,通过使用关键字extends来显式的指明其父类。来显式的指明其父类。8.2.1 继承的实现继承的实现n其基本的语法格式如下:其基本的语法格式如下:修饰符
3、修饰符 class 子类名子类名 extends 父类名父类名 类体类体 public class Husband protected String name;protected int age;protected String sex;private Wife wife;public class Wife protected String name;protected int age;protected String sex;private Husband husband;public class Person protected String name;protected int age;
4、protected String sex;public class Husband private Wife wife;public class Wife private Husband husband;n子类可以继承子类可以继承父类的所有非父类的所有非私有成员变量私有成员变量和成员方法。和成员方法。8.2.1 继承的实现继承的实现【例例8-3】创建创建Bird类,定义一个成员变量描类,定义一个成员变量描述颜色。创建述颜色。创建Pigeon类,它继承了类,它继承了Bird类。在类。在构造方法中,对继承的构造方法中,对继承的color变量赋值。变量赋值。public class Bird Str
5、ing color;public class Pigeon extends Bird public Pigeon()color=White;8.2.1 继承的实现继承的实现n成员的继承成员的继承子类可以自行声明子类可以自行声明新的成员变量新的成员变量子类可以声明子类可以声明新的成员方法新的成员方法子类可以声明与父类具有相同子类可以声明与父类具有相同签名签名的成员的成员方法,即方法的方法,即方法的重写重写。子类可以声明与父类中同名方法的子类可以声明与父类中同名方法的重载方重载方法法。8.2.2 继承中的重写继承中的重写n重写是指父子类之间的关系,当子类继承父重写是指父子类之间的关系,当子类继承父
6、类中所有可能被子类访问的成员方法时,类中所有可能被子类访问的成员方法时,如如果子类的方法名与父类的方法名相同,果子类的方法名与父类的方法名相同,那么那么子类就不能继承父类的方法,此时,称为子子类就不能继承父类的方法,此时,称为子类的方法类的方法重写重写了父类的方法。了父类的方法。n重写体现了子类补充或者改变父类方法的能重写体现了子类补充或者改变父类方法的能力。力。通过重写,可以使一个方法在不同的子通过重写,可以使一个方法在不同的子类中表现出不同的行为类中表现出不同的行为。class A public void f()System.out.println(this is fatherclass!
7、);public class myapp extends A public void f1()/增加新的成员方法增加新的成员方法 System.out.println(this is subclass!);public static void main(String args)myapp a=new myapp();a.f();class A public void f()System.out.println(this is fatherclass!);public class myapp extends A public void f()/方法的重写方法的重写 System.out.prin
8、tln(this is subclass!);public static void main(String args)myapp a=new myapp();a.f();class A public void f()System.out.println(this is fatherclass!);public class myapp extends A public void f(String str)/方法的重载方法的重载 System.out.println(this is subclass!+str);public static void main(String args)myapp a
9、=new myapp();a.f(abc);8.2.3 使用使用super关键字关键字n子类可以子类可以继承继承父类的非私有成员变量和成员父类的非私有成员变量和成员方法。方法。n但若子类中声明的成员变量与父类的但若子类中声明的成员变量与父类的成员变成员变量同名量同名,则子类的成员变量,则子类的成员变量隐藏隐藏了父类的成了父类的成员变量。员变量。n若子类中声明的成员方法与父类的若子类中声明的成员方法与父类的成员方法成员方法同名同名,并且方法的,并且方法的返回值类型、参数个数和返回值类型、参数个数和类型也完全相同类型也完全相同,则子类的成员方法,则子类的成员方法重写重写了了父类的成员方法。父类的成
10、员方法。8.2.3 使用使用super关键字关键字n若想在子类中访问父类中被隐藏的成员变量若想在子类中访问父类中被隐藏的成员变量和被重写的成员方法,可以使用和被重写的成员方法,可以使用super关键字关键字来操作。来操作。nsuper关键字主要有以下两种用途。关键字主要有以下两种用途。n1.调用父类的构造方法调用父类的构造方法若要创建子类对象时希望对从父类继承的若要创建子类对象时希望对从父类继承的成员变量初始化成员变量初始化,需在子类的构造方法中,需在子类的构造方法中利用利用super调用父类的构造方法。调用父类的构造方法。8.2.3 使用使用super关键字关键字n1.调用父类的构造方法调用
11、父类的构造方法构造格式:构造格式:super(参数列表参数列表);利用利用super调用父类构造方法的语句必须作调用父类构造方法的语句必须作为子类构造方法中的第一条语句。为子类构造方法中的第一条语句。若第一条语句不是调用父类构造方法的语若第一条语句不是调用父类构造方法的语句,系统会自动插入一条调用父类默认构句,系统会自动插入一条调用父类默认构造方法的语句,如果父类没有不带参数的造方法的语句,如果父类没有不带参数的构造方法,则会出现编译错误。构造方法,则会出现编译错误。public class Circle private int r;public Circle()r=0;public Circ
12、le(int r1)r=r1;public int getR()return r;public class Cylinder extends Circle int x,y;public Cylinder()super();x=0;y=0;public Cylinder(int r1,int x1,int y1)super(r1);x=x1;y=y1;public static void main(String args)Cylinder cy=new Cylinder();Cylinder cy2=new Cylinder(1,2,3);System.out.println(cy);Syste
13、m.out.println(cy2);半径:半径:0 坐标:坐标:(0,0)半径:半径:1 坐标:坐标:(2,3)public String toString()return 半径半径:+getR()+坐标坐标:(+x+,+y+);8.2.3 使用使用super关键字关键字nsuper关键字主要有以下两种用途。关键字主要有以下两种用途。n2.操作被隐藏的成员变量和被重写的成员方法操作被隐藏的成员变量和被重写的成员方法具体格式:具体格式:super.成员变量名成员变量名 super.成员方法名成员方法名(参数列表参数列表)class Father public String v=Father;p
14、ublic String x=Father类的成员变量类的成员变量x!;public Father()System.out.println(Father构造方法被调用构造方法被调用!);public void outinfo()System.out.println(Father的的outinfo方法被调用方法被调用);public class Son extends Fatherpublic String v=Son;public Son()super();System.out.println(Son构造方法被调用构造方法被调用!);/覆盖了超类成员方法覆盖了超类成员方法outinfo()pu
15、blic void outinfo()System.out.println(Son的的outinfo()方法被调用方法被调用);public void test()String v=哈哈哈哈!;System.out.println(-1-);System.out.println(v);System.out.println(this.v);System.out.println(super.v);System.out.println(-2-);System.out.println(x);System.out.println(super.x);System.out.println(-3-);outi
16、nfo();this.outinfo();super.outinfo();public static void main(String args)Son son=new Son();son.test();8.3 多态多态n对于同一个消息,不同类的对象可以作出不对于同一个消息,不同类的对象可以作出不同的反应被称为同的反应被称为多态性多态性。n在在Java中,通常使用中,通常使用方法的重载方法的重载(Overloading)和重写和重写(Overriding)实现类的实现类的多态性。多态性。n方法的重载是指在一个类中,出现方法的重载是指在一个类中,出现多个方法多个方法名相同,但参数个数或参数类型不
17、同的方法名相同,但参数个数或参数类型不同的方法,则称为方法的重载。则称为方法的重载。Java在执行具有重载关在执行具有重载关系的方法时,将系的方法时,将根据调用参数的个数和类型根据调用参数的个数和类型区分具体执行的是哪个方法区分具体执行的是哪个方法。8.3 多态多态【例例8-5】在项目中创建在项目中创建MaxNumber类,定类,定义两个义两个getMax()方法,分别用来比较方法,分别用来比较int类型和类型和double类型变量并获得最大值。类型变量并获得最大值。public class MaxNumber public static int getMax(int number1,int
18、number2)return(number1 number2?number1:number2);public class MaxNumber public static int getMax()public static double getMax(double number1,double number2)return(number1 number2?number1:number2);public static void main(String args)int intMax=getMax(12,21);System.out.println(12和和21最大值最大值:+intMax);dou
19、ble doubleMax=getMax(12.0,21.0);System.out.println(12.0和和21.0最大值最大值:+doubleMax);class BaseClasspublic void f()System.out.println(father);class DeriveClass1 extends BaseClasspublic void f()System.out.println(son1);class DeriveClass2 extends BaseClasspublic void f()System.out.println(son2);public clas
20、s myapp public static void main(String args)BaseClass bc=new BaseClass3;bc0=new BaseClass();bc0.f();bc1=new DeriveClass1();bc1.f();bc2=new DeriveClass2();bc2.f();fatherson1son28.4 Object类类n8.4.1 getClass()方法方法n8.4.2 toString()方法方法n8.4.3 equals()方法方法8.4 Object类类n在在Java中,所有的类都直接或间接继承了类。中,所有的类都直接或间接继承了
21、类。nObject类是所有类的父类类是所有类的父类,是,是Java类层中最类层中最高层类,高层类,Java中任何一个类都是它的子类。中任何一个类都是它的子类。n当创建一个类时,总是在继承,除非某个类当创建一个类时,总是在继承,除非某个类已经指定要从其他类继承,否则它就是从类已经指定要从其他类继承,否则它就是从类继承而来的,继承而来的,如如String、Integer等类都是继承于等类都是继承于Object类类除此之外自定义的类也都继承于除此之外自定义的类也都继承于Object类类8.4 Object类类n由于所有类都是由于所有类都是Object子类,所以在定义类子类,所以在定义类时,省略了时,
22、省略了extends Object关键字。关键字。8.4 Object类类nJava将所有的类都作为将所有的类都作为Object类的子类。类的子类。1)一个一个Object类型的对象可以用来类型的对象可以用来引用任引用任何类的对象何类的对象。2)可以将成员方法的可以将成员方法的参数设置为参数设置为Object类类型型,以方便方法能够接收参数传递进来的任,以方便方法能够接收参数传递进来的任何类型的对象。何类型的对象。3)在在Object类中提供了所有对象都类中提供了所有对象都应该有应该有的行为方法的行为方法,可以更好地统一这些成员方法,可以更好地统一这些成员方法的接口形式。的接口形式。8.4 O
23、bject类类n1)getClass()方法方法getClass()方法是方法是Object类的定义的方法,类的定义的方法,它会返回它会返回对象执行时的对象执行时的Class实例实例,然后,然后使用此实例调用使用此实例调用getName()方法可以取得方法可以取得类的名称。语法如下:类的名称。语法如下:getClass().getname();可以将可以将getClass()方法与方法与toString()方法方法联合使用。联合使用。8.4 Object类类n2)toString()方法方法toString()方法的功能是方法的功能是将一个对象返回为将一个对象返回为字符串形式,字符串形式,返回
24、一个返回一个String实例。实例。在实际应用中通常重写在实际应用中通常重写toString()方法,为方法,为对象提供一个特定的输出模式。对象提供一个特定的输出模式。当这个类当这个类转换为字符串或与字符串连接转换为字符串或与字符串连接时,时,将自动调用重写的将自动调用重写的toString()方法。方法。在在输出输出引用类型变量时,也会自动调用引用类型变量时,也会自动调用toString()方法。方法。8.4 Object类类【例例8-6】重写重写toString方法方法public class ToStringDemo Override public String toString()re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 接口 继承
限制150内