第5面向对象高级程序设计.ppt
《第5面向对象高级程序设计.ppt》由会员分享,可在线阅读,更多相关《第5面向对象高级程序设计.ppt(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第5面向对象高级程序设计 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望2主要内容主要内容5.1 5.1 继承继承继承继承 5.2 5.2 多态性多态性多态性多态性5.3 5.3 抽象类和抽象方法抽象类和抽象方法抽象类和抽象方法抽象类和抽象方法5.4 5.4 接口接口接口接口5.5 5.5 内部类和匿名类内部类和匿名类内部类和匿名类内部类和匿名类35.1 继承继承 5.1.1 5.1.1 创建子类创建子类创建子类创建子类5.1.2 5.1.2 成员变量的隐藏和方法
2、的重写成员变量的隐藏和方法的重写成员变量的隐藏和方法的重写成员变量的隐藏和方法的重写5.1.3 5.1.3 supersuper5.1.4 5.1.4 对象的上转型对象对象的上转型对象对象的上转型对象对象的上转型对象45.1.1 创建子类创建子类n n继承是一种由已有的类创建新类的机制。利用继承继承是一种由已有的类创建新类的机制。利用继承继承是一种由已有的类创建新类的机制。利用继承继承是一种由已有的类创建新类的机制。利用继承,我们可以先创建一个拥有共同属性的一般类,根据我们可以先创建一个拥有共同属性的一般类,根据我们可以先创建一个拥有共同属性的一般类,根据我们可以先创建一个拥有共同属性的一般类
3、,根据该一般类再创建具有特殊属性的新类。由继承而得该一般类再创建具有特殊属性的新类。由继承而得该一般类再创建具有特殊属性的新类。由继承而得该一般类再创建具有特殊属性的新类。由继承而得到的类称为子类到的类称为子类到的类称为子类到的类称为子类(subclass)(subclass),被继承的类称为父类,被继承的类称为父类,被继承的类称为父类,被继承的类称为父类(或叫超类,(或叫超类,(或叫超类,(或叫超类,superclasssuperclass)。)。)。)。n n直接或间接被继承的类都是父类。子类继承父类的直接或间接被继承的类都是父类。子类继承父类的直接或间接被继承的类都是父类。子类继承父类的
4、直接或间接被继承的类都是父类。子类继承父类的状态和行为,同时也可以修改父类的状态或重写父状态和行为,同时也可以修改父类的状态或重写父状态和行为,同时也可以修改父类的状态或重写父状态和行为,同时也可以修改父类的状态或重写父类的行为,并添加新的状态和行为。类的行为,并添加新的状态和行为。类的行为,并添加新的状态和行为。类的行为,并添加新的状态和行为。JavaJava中不支持中不支持中不支持中不支持多重继承。多重继承。多重继承。多重继承。55.1.1 创建子类创建子类n n通过在类的声明中加入通过在类的声明中加入通过在类的声明中加入通过在类的声明中加入extendsextends子句来创建一个类的子
5、类,子句来创建一个类的子类,子句来创建一个类的子类,子句来创建一个类的子类,其格式如下:其格式如下:其格式如下:其格式如下:class SubClass extends SuperClassclass SubClass extends SuperClass 上面的代码把上面的代码把SubClassSubClass声明为声明为SuperClassSuperClass的直接子类。如果的直接子类。如果SuperClassSuperClass又是某个类的子类,则又是某个类的子类,则SubClassSubClass同时也是该类的同时也是该类的(间接间接)子类。子类可以继承父类的成员变量和方法。如果缺子类
6、。子类可以继承父类的成员变量和方法。如果缺省省extendsextends子句,则该类为子句,则该类为java.lang.Objectjava.lang.Object的子类。的子类。子类可子类可以继承父类中访问权限设定为以继承父类中访问权限设定为publicpublic、protectedprotected、defaultdefault的的成员变量和方法。成员变量和方法。但是但是不能继承访问权限为不能继承访问权限为privateprivate的成员变的成员变量和方法量和方法。65.1.1 创建子类创建子类75.1.1 创建子类创建子类Public class MammalClassPublic
7、 class MammalClass String name,eyeColor;String name,eyeColor;int age;int age;public MammalClass()public MammalClass()name=name=“the namethe name”;eyeColor=eyeColor=“blackblack”;age=0;age=0;85.1.1 创建子类创建子类注意,注意,MammalClassMammalClass类拥有来自于类拥有来自于DogClassDogClass和和CatClassCatClass的相同的相同属性,包括了属性,包括了name
8、name、eyeColoreyeColor、ageage等。现在我们可以利用等。现在我们可以利用继承重写继承重写DogClassDogClass和和CatClassCatClass。public class DogClass public class DogClass extends extends MammalClass MammalClass boolean hasTailboolean hasTail;/name,eyeColor,agename,eyeColor,age已经从父类继承已经从父类继承 public DogClass()public DogClass()/隐式调用隐式调用s
9、uper()super()name=Chase name=Chase;eyeColor=BlackeyeColor=Black;age=2;age=2;hasTail=true;hasTail=true;95.1.1 创建子类创建子类【例例5-15-1】继承的简单例子继承的简单例子class Father /class Father /父类父类 private int money;private int money;float weight,height;float weight,height;String head;String head;String speak(String s)Stri
10、ng speak(String s)return s;return s;class Son extends Father /class Son extends Father /子类子类 String hand,foot;String hand,foot;Weight,height,head,Speak();Hand,foot105.1.1 创建子类创建子类【例例5-15-1】继承的简单例子继承的简单例子public class TestExtend public class TestExtend public static void main(String args)public static
11、 void main(String args)Son boy=new Son();Son boy=new Son();boy.weight=120f;boy.height=1.8f;boy.weight=120f;boy.height=1.8f;boy.head=boy.head=一个头一个头;boy.hand=boy.hand=两只手两只手;boy.foot=boy.foot=两只脚两只脚;System.out.println(System.out.println(我是儿子我是儿子););System.out.println(System.out.println(我有我有:+boy.hand
12、+:+boy.hand+、+boy.foot+boy.foot+、+boy.head+boy.head +、重、重+boy.weight+boy.weight+、高、高+boy.height);+boy.height);上面程序运行结果如下:上面程序运行结果如下:我是儿子我是儿子我有我有:两只手、两只脚、一个头、重两只手、两只脚、一个头、重120.0120.0、高、高1.81.8115.1.1 创建子类创建子类 如果子类和父类如果子类和父类如果子类和父类如果子类和父类不在同一个包不在同一个包不在同一个包不在同一个包中,那么,中,那么,中,那么,中,那么,子类可以继承子类可以继承子类可以继承子类
13、可以继承了父类的了父类的了父类的了父类的protectedprotected、publicpublic修饰的成员变量做为子类的成修饰的成员变量做为子类的成修饰的成员变量做为子类的成修饰的成员变量做为子类的成员变量,并且也可以继承了父类的员变量,并且也可以继承了父类的员变量,并且也可以继承了父类的员变量,并且也可以继承了父类的protectedprotected、public public 修饰修饰修饰修饰的方法作为子类的方法。另外子类和父类不在同一个包中,的方法作为子类的方法。另外子类和父类不在同一个包中,的方法作为子类的方法。另外子类和父类不在同一个包中,的方法作为子类的方法。另外子类和父类
14、不在同一个包中,则子类不能继承父类的则子类不能继承父类的则子类不能继承父类的则子类不能继承父类的defaultdefault变量和变量和变量和变量和defaultdefault方法。方法。方法。方法。125.1.1 创建子类创建子类 【例5-2】继承不同包中的类的简单例子/HouseHold.javapackage xing.house;public class HouseHold /家类 protected String address;/地址 保护型 public String surnname;/姓 公共型 String givenname;/名 缺省 public HouseHold(
15、String add)address=add;protected String getAddress()return address;void setMoney(String newadd)address=newadd;void setAddress(String add)address=add;135.1.1 创建子类创建子类 /Mikey.java:package xing.friend;import xing.house.HouseHold;public class Mikey extends HouseHold public Mikey()super(Star flight stree
16、t 110);public static void main(String args)Mikey mikey=new Mikey();/mikey.givenname=“Johnson”;/非法 mikey.surnname=Math;/合法.mikey.address=Star flight street 110;/合法.String m=mikey.getAddress();/合法 /mikey.setAddress(Star flight street 110);/非法.System.out.println(mikey.surnname+:+m);145.1.1 创建子类创建子类 程序编
17、译和运行过程如下:155.1.2 5.1.2 成员变量的隐藏和方法的重写成员变量的隐藏和方法的重写成员变量的隐藏和方法的重写成员变量的隐藏和方法的重写 当我们在子类中定义的成员变量和父类中的成员变量同名时,此时称子类的成员变量隐藏了父类的成员变量。当子类中定义了一个方法,并且这个方法的名字,返回类型,参数个数以及类型和父类的某个方法完全相同时,父类的这个方法将被隐藏,这时我们说重写了父类的方法。子类通过成员变量的隐藏和方法的重写可以把父类的状态和行为改变为自身的状态和行为。165.1.2 5.1.2 成员变量的隐藏和方法的重写成员变量的隐藏和方法的重写成员变量的隐藏和方法的重写成员变量的隐藏和
18、方法的重写 例如下面的这段程序就是这样的情况:class SuperClass /父类 int y;void setY()y=0;class SubClass extends SuperClass int y;/父类变量y被隐藏 void setY()/重写父类的方法setY()y=1;175.1.3 super 5.1.3 super 子类在隐藏了父类的成员变量或重写了父类的方法后,常常还要用到父类的成员变量,或在重写的方法中使用父类中被重写的方法以简化代码的编写,这时就要访问父类的成员变量或调用父类的方法,Java中通过super来实现对父类成员的访问。我们知道,this用来引用当前对象,
19、与this类似,super用来引用当前对象的父类。super的使用可以分为下面三种情况:1)用来访问父类被隐藏的成员变量,如:super.variable 2)用来调用父类中被重写的方法,如:super.Method(paramlist):3)用来调用父类的构造方法,如:super(paramlist);185.1.3 super 【例5-3】调用父类的构造方法的例子class A /类A public int n;/公共类型的成员变量 public A()public A(int n)this.n=n;int method()return n;public class B extends A
20、 /类B public B()super(15);public static void main(String args)A aInstance=new B();int b=aInstance.method();System.out.println(类A中的成员变量:+b);19Super的使用的使用-调用父类的方法调用父类的方法 class superClass class superClass int y;int y;superClass()superClass()y=30;y=30;System.out.println(in superClass:y=+y);System.out.pri
21、ntln(in superClass:y=+y);void doPrint()void doPrint()System.out.println(In superClass.doPrint();System.out.println(In superClass.doPrint();例子例子5-4 5-4 调用父类的方法调用父类的方法20class subClass extends superClass int y;subClass()super();/调用父类的构造方法(多余的)y=50;System.out.println(in subClass:y=+y);void doPrint()supe
22、r.doPrint();/调用父类的方法 System.out.println(in subClass.doPrint();System.out.println(super.y=+super.y+sub.y=+y);public class inviteSuper public static void main(String args)subClass subSC=new subClass();subSC.doPrint();215.1.4对象的上转型对象 假设A 类是B 类的父类,class B extends A 当我们用子类创建一个对象,并把这个对象的引用放到父类的对象中时,例如 A a
23、;A a=new B();或 A a;B b=new B();a=b;称这个父类对象a,是子类对象b的上转型对象。225.1.4对象的上转型对象 对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能。上转型对象具有如下特点:1)上转型对象不能操作子类新增的成员变量和子类新增的方法。2)上转型对象可以操作子类继承或重写的成员变量,也可以使用子类继承的或重写的方法。3)如果子类重写了父类的某个方法后,当对象的上转对象调用这个方法时一定是调用了这个重写的方法,因为程序在运行时知道,这个上转对象的实体是子类创建的,只不过损失了一些功能而已。不要将父类创建的对象和子类对象的上
24、转型对象相混淆。上转型对象在Java编程中是常见的。可以将对象的上转型对象再强制转换到一个子类对象,这可以将对象的上转型对象再强制转换到一个子类对象,这时时,该子类对象又具备了子类所给的所有属性和功能。该子类对象又具备了子类所给的所有属性和功能。235.1.4对象的上转型对象 【例5-5】上转型对象的使用class Mammal /哺乳动物类 private int n=40;void crySpeak(String s)System.out.println(s);public class Monkey extends Mammal /猴子类 void computercomputer(int
25、 aa,int bb)int cc=aa*bb;System.out.println(cc);void crySpeak(String s)System.out.println(*+s+*);public static void main(String args)/mammal是Monkey类的对象的上转型对象.Mammal mammal=new Monkey();mammal.crySpeak(I love this game);/puter(10,10);/把上转型对象强制转化为子类的对象.Monkey monkey=(Monkey)mammal;puter(10,10);245.1.4对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 高级 程序设计
限制150内