《类的继承性精选PPT.ppt》由会员分享,可在线阅读,更多相关《类的继承性精选PPT.ppt(68页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、类的继承性类的继承性第1页,此课件共68页哦第2页,此课件共68页哦第3页,此课件共68页哦第4页,此课件共68页哦第5页,此课件共68页哦访问控制权限了解访问控制权限了解 第6页,此课件共68页哦第第3讲讲 面向对象编程(高级篇)面向对象编程(高级篇)第7页,此课件共68页哦 面向对象编程(基础篇)知识回顾面向对象编程(基础篇)知识回顾第8页,此课件共68页哦主要内容主要内容3.1 继承性继承性 3.2 多态性多态性3.3 抽象类抽象类3.4接口接口3.5内部类和匿名类内部类和匿名类3.1 继承的作用3.2 子类对象的创建3.3 在子类中访问父类的成员3.4 覆盖父类的方法第9页,此课件共6
2、8页哦3.1.1 继承继承Person-name:String-age :String+getName():String+setName(String n):void+getAge():String+setAge(int a):voidStudent-name:String-age :String-school :String+getName():String+setName(String n):void+getAge():String+setAge(int a):void+getSchool():String+setSchool(String s):void1.模仿人类的思维方式模仿人类的思
3、维方式人类的继承性人类的继承性第10页,此课件共68页哦n nPersonPerson类类类类class Personclass Person private String name;private String name;private int age;private int age;public String getName()public String getName()return name;return name;public void setName(String n)public void setName(String n)name=n;name=n;public int get
4、Age()public int getAge()return age;return age;public void setAge(int a)public void setAge(int a)age=a;age=a;n nStudentStudent类类类类class Studentclass Student private String name;private String name;private int age;private int age;private String school;private String school;public String getName()publi
5、c String getName()return name;return name;public void setName(String n)public void setName(String n)name=n;name=n;public int getAge()public int getAge()return age;return age;public void setAge(int a)public void setAge(int a)age=a;age=a;public String getSchool public String getSchool return school;re
6、turn school;public void setSchool(String s)public void setSchool(String s)school=s;school=s;第11页,此课件共68页哦3.1.1 继承继承1.模仿人类的思维方式模仿人类的思维方式人类的继承性人类的继承性2.程序的代码重用性程序的代码重用性少写代码少写代码第12页,此课件共68页哦继承关系格式:继承关系格式:class class 父类父类父类父类class class 子类子类子类子类 extendsextends 父类父类父类父类第13页,此课件共68页哦QQ牧场的设计牧场的设计目的:了解在真实系统中
7、进行设计时如何进行继承层次的设计?第14页,此课件共68页哦 找出对象的共同属性和行为找出对象的共同属性和行为 这个程序必须能够在任何时候加入新类型的动物。这个程序必须能够在任何时候加入新类型的动物。这个程序必须能够在任何时候加入新类型的动物。这个程序必须能够在任何时候加入新类型的动物。首先要辨别出所有动物都有的、抽象的共同特征,然首先要辨别出所有动物都有的、抽象的共同特征,然首先要辨别出所有动物都有的、抽象的共同特征,然首先要辨别出所有动物都有的、抽象的共同特征,然后以这些共同特征设计出能够让所有动物加以扩充的类。后以这些共同特征设计出能够让所有动物加以扩充的类。后以这些共同特征设计出能够让
8、所有动物加以扩充的类。后以这些共同特征设计出能够让所有动物加以扩充的类。考虑:考虑:这这6种动物有什么共同特点?种动物有什么共同特点?这些类型有什么相关性?这些类型有什么相关性?第15页,此课件共68页哦 找出对象的共同属性和行为找出对象的共同属性和行为n n5 5个实例变量:个实例变量:个实例变量:个实例变量:picture:picture:动物动物动物动物JPEGJPEG图像的名称图像的名称图像的名称图像的名称foodfood:此动物所吃的食物:此动物所吃的食物:此动物所吃的食物:此动物所吃的食物(meat/grass)(meat/grass)hungerhunger:代表饥饿程度的:代表
9、饥饿程度的:代表饥饿程度的:代表饥饿程度的intint值。会根据动物吃了多少食物而改变。值。会根据动物吃了多少食物而改变。值。会根据动物吃了多少食物而改变。值。会根据动物吃了多少食物而改变。boundaries:boundaries:代表动物活动范围区域的长宽。代表动物活动范围区域的长宽。代表动物活动范围区域的长宽。代表动物活动范围区域的长宽。location:location:动物在活动区域中的位置。动物在活动区域中的位置。动物在活动区域中的位置。动物在活动区域中的位置。n n4 4个实例方法:个实例方法:个实例方法:个实例方法:makeNoise():makeNoise():动物发出声音的
10、行为和程序。动物发出声音的行为和程序。动物发出声音的行为和程序。动物发出声音的行为和程序。eat():eat():动物遇到食物时的行为程序。动物遇到食物时的行为程序。动物遇到食物时的行为程序。动物遇到食物时的行为程序。sleep():sleep():睡眠的行为程序。睡眠的行为程序。睡眠的行为程序。睡眠的行为程序。roam():roam():不在进食或睡眠时的行为程序。不在进食或睡眠时的行为程序。不在进食或睡眠时的行为程序。不在进食或睡眠时的行为程序。第16页,此课件共68页哦 设计代表共同状态与行为的类设计代表共同状态与行为的类Animal-String pictual-String food
11、-int hunger-Position boudaries-Position locationvoid makeNoise()void eat()void sleep()void roam()LionCatTiggerHippoDogWolf第17页,此课件共68页哦决决定定子子类类是是否否需需要要让让某某项项行行为为有有特特定的不同的运行方式定的不同的运行方式Animal成员变量。void makeNoise()void eat()void sleep()void roam()Lionvoid makeNoise()void eat()Catvoid makeNoise()void eat
12、()TiggerHippoDogWolf第18页,此课件共68页哦决决定定子子类类是是否否需需要要让让某某项项行行为为有有特特定的不同的运行方式定的不同的运行方式Animal成员变量。void makeNoise()void eat()void sleep()void roam()Lionvoid makeNoise()void eat()Catvoid makeNoise()void eat()Tiggervoid makeNoise()void eat()Dogvoid makeNoise()void eat()Hippovoid makeNoise()void eat()Wolfvoid
13、 makeNoise()void eat()第19页,此课件共68页哦寻找更多抽象化的机会寻找更多抽象化的机会Animal成员变量。void makeNoise()void eat()void sleep()void roam()Lionvoid makeNoise()void eat()Catvoid makeNoise()void eat()Tiggervoid makeNoise()void eat()Dogvoid makeNoise()void eat()Hippovoid makeNoise()void eat()Wolfvoid makeNoise()void eat()第20页
14、,此课件共68页哦完成类的继承层次完成类的继承层次Animal。Lionvoid makeNoise()void eat()Catvoid makeNoise()void eat()Tiggervoid makeNoise()void eat()Dogvoid makeNoise()void eat()Hippovoid makeNoise()void eat()Wolfvoid makeNoise()void eat()Felineroam()Canineroam()第21页,此课件共68页哦完成类的继承层次完成类的继承层次寻找更多抽象化的机会寻找更多抽象化的机会决决定定子子类类是是否否需需
15、要要让让某某项项行行为为有有特特定定的的 不同的运行方式不同的运行方式 设计代表共同状态与行为的类设计代表共同状态与行为的类如何进行继承层次的设计如何进行继承层次的设计 -自下而上的设计自下而上的设计 找出对象的共同属性和行为找出对象的共同属性和行为第22页,此课件共68页哦子类对象调用成员的原则子类对象调用成员的原则AnimalmakeNoise()eat()sleep()roam()Wolfvoid makeNoise()void eat()Canineroam()创建大野狼对象Wolf w=new Wolf();调用大野狼的方法w.makeNoise();调用犬科的方法w.roam();
16、调用动物的方法w.sleep()第23页,此课件共68页哦 添加子类的新成员添加子类的新成员 改造父类的成员改造父类的成员 继承父类的成员继承父类的成员已知父类如何进行子类设计已知父类如何进行子类设计 -自上而下的设计自上而下的设计 第24页,此课件共68页哦访问控制权限了解访问控制权限了解 第25页,此课件共68页哦 添加子类的新成员添加子类的新成员 改造父类的成员改造父类的成员 继承父类的成员继承父类的成员已知父类如何进行子类设计已知父类如何进行子类设计 -自上而下的设计自上而下的设计 第26页,此课件共68页哦3.1.2 子类对象的创建子类对象的创建 一、子类对象的实例化过程一、子类对象
17、的实例化过程二、二、super的作用的作用第27页,此课件共68页哦3.1.2 子类的创建子类的创建 一、子类对象的实例化过程一、子类对象的实例化过程class Personclass Personpublic Person()public Person()System.out.println(“System.out.println(“父类构造父类构造父类构造父类构造”)”);class Studentclass Studentpublic Student()public Student()System.out.println(“System.out.println(“子类构造子类构造子类构造
18、子类构造”)”);第28页,此课件共68页哦3.1.2 子类对象的创建子类对象的创建 一、子类对象的实例化过程一、子类对象的实例化过程public class TestDemo11public class TestDemo11public static void main(String args)public static void main(String args)Student stu=new Student();Student stu=new Student();运行结果:运行结果:?第29页,此课件共68页哦3.1.2 子类对象的创建子类对象的创建 一、子类对象的实例化过程一、子类对象
19、的实例化过程 1、先自动调用父类构造函数(父类中的无参构造函数)先自动调用父类构造函数(父类中的无参构造函数)2、然后调用子类构造函数、然后调用子类构造函数注注意意:如如果果父父类类中中有有多多个个构构造造方方法法时时,如如何何才才能能调调用用父父类类中某个特定的构造方法呢?中某个特定的构造方法呢?其其做做法法是是在在子子类类的的构构造造方方法法中中通通过过super()来来调调用用父父类特定的构造方法。类特定的构造方法。第30页,此课件共68页哦3.1.2 创建子类创建子类二、二、二、二、super()super()、super()super()class Personclass Perso
20、nprivate String name;private String name;private int age;private int age;public Person()public Person()System.out.println(“System.out.println(“调用调用调用调用PersonPerson类的无参构造方法类的无参构造方法类的无参构造方法类的无参构造方法”)”);public Peron(String name,int age)public Peron(String name,int age)System.out.println(“System.out.pri
21、ntln(“调用了调用了调用了调用了PersonPerson类的有参构造方法类的有参构造方法类的有参构造方法类的有参构造方法”)”);this.name=name;this.name=name;this.age=age;this.age=age;public void show()public void show()System.out.println(“System.out.println(“姓名:姓名:姓名:姓名:”+name+”+name+”年龄:年龄:年龄:年龄:”+age);”+age);第31页,此课件共68页哦3.1.2 子类对象的创建子类对象的创建class Student e
22、xtends Personclass Student extends Personprivate String department;private String department;public Student()public Student()System.out.println(“Student System.out.println(“Student 无参构造无参构造”)”);public Student(String name,int age,String dep)public Student(String name,int age,String dep)super(name,age
23、);super(name,age);department=dep;department=dep;System.out.println(“System.out.println(“我是我是”+department+”+department+”的学生的学生”);”);System.out.println(“StudentSystem.out.println(“Student有参构造有参构造”)”);第32页,此课件共68页哦3.1.2 子类对象的创建子类对象的创建public class TestDemo1public class TestDemo1public static void main(S
24、tring args)public static void main(String args)Student stu1=new Student();Student stu1=new Student();Student stu2=new Student(“Student stu2=new Student(“李四李四”,23,”,23,”计算机系计算机系”);”);stu1.show();stu1.show();stu2.show();stu2.show();第33页,此课件共68页哦3.1.2 子类对象的创建子类对象的创建(1)(1)省略红色字体省略红色字体super(name,age)supe
25、r(name,age),父类中的构造方法哪个会被调用?,父类中的构造方法哪个会被调用?(2)(2)子类构造方法中调用父类构造方法的子类构造方法中调用父类构造方法的super super 语句位置有没有限制?语句位置有没有限制?(3)(3)如果父类中只定义了有参的构造方法,而子类的构造方法中并如果父类中只定义了有参的构造方法,而子类的构造方法中并没有显式的用没有显式的用supersuper()来调用父类中特定的构造方法,程序()来调用父类中特定的构造方法,程序此时会有问题吗?此时会有问题吗?(4)(4)找出找出thisthis和和supersuper的相同点和不同点。的相同点和不同点。思考!思考
26、!!找出继承中构造方法的调用规则找出继承中构造方法的调用规则第34页,此课件共68页哦3.1.3 3.1.3 成员变量的隐藏和方法的覆写成员变量的隐藏和方法的覆写成员变量的隐藏和方法的覆写成员变量的隐藏和方法的覆写(1)当在子类中定义的成员变量和父类中的成员变量同名同名时,此时称子类的成员变量隐藏了父类的成员变量隐藏了父类的成员变量。(2)当子类中定义了一个方法,并且这个方法的名字,返回类型,参数个数以及类型和父类的某个方法完全相同完全相同时,父类的这个方法将被隐藏,这时我们说重写了父类的方法重写了父类的方法。子类通过成员变量的隐藏和方法的重写可以把父类的状态和行为改子类通过成员变量的隐藏和方
27、法的重写可以把父类的状态和行为改变为自身的状态和行为。变为自身的状态和行为。第35页,此课件共68页哦3.1.3 3.1.3 成员变量的隐藏和方法的覆写成员变量的隐藏和方法的覆写成员变量的隐藏和方法的覆写成员变量的隐藏和方法的覆写例如下面的这段程序就是这样的情况:class SuperClass /父类 int y;void setY()y=0;class SubClass extends SuperClass int y;/父类变量y被隐藏 void setY()/重写父类的方法setY()y=1;public TestDemo3public static void main(String
28、args)SubClass ss=new SubClass();ss.setY();第36页,此课件共68页哦 子类在隐藏了父类的成员变量或重写了父类的方法后,常常还要用到父类的成员变量,或在重写的方法中使用父类中被重写的方法以简化代码的编写,这时就要访问父类的成员变量或调用父类的方法,Java中通过super来实现对父类成员的访问。this用来引用当前对象,与this类似,super用来引用当前当前对象的父类对象的父类。super的使用可以分为下面三种情况:1)用来访问父类被隐藏的成员变量,如:super.y 2)用来调用父类中被重写的方法,如:super.setY()3)用来调用父类的构造
29、方法,如:super(paramlist);3.1.3 3.1.3 成员变量的隐藏和方法的覆写成员变量的隐藏和方法的覆写成员变量的隐藏和方法的覆写成员变量的隐藏和方法的覆写思考:方法的重载与覆写非常类似,找出它们的区别!思考:方法的重载与覆写非常类似,找出它们的区别!第37页,此课件共68页哦课后讨论课后讨论n n讨论二类的继承性与多态性(讨论二类的继承性与多态性(讨论二类的继承性与多态性(讨论二类的继承性与多态性(1 1)主题一:方案设计分析主题一:方案设计分析主题一:方案设计分析主题一:方案设计分析主题三:知识原理掌握主题三:知识原理掌握主题三:知识原理掌握主题三:知识原理掌握构造方法的重
30、载构造方法的重载构造方法的重载构造方法的重载思考:思考:思考:思考:(1 1)找出父类向子类派生时,构造方法的调用规律)找出父类向子类派生时,构造方法的调用规律)找出父类向子类派生时,构造方法的调用规律)找出父类向子类派生时,构造方法的调用规律(2 2)找出方法的重载与重写的区别)找出方法的重载与重写的区别)找出方法的重载与重写的区别)找出方法的重载与重写的区别第38页,此课件共68页哦主题一:方案设计分析主题一:方案设计分析n n写出你所能想到的所有二维、三维形状,并用它们组成一个写出你所能想到的所有二维、三维形状,并用它们组成一个写出你所能想到的所有二维、三维形状,并用它们组成一个写出你所
31、能想到的所有二维、三维形状,并用它们组成一个形状层次结构。层次结构把形状层次结构。层次结构把形状层次结构。层次结构把形状层次结构。层次结构把ShapeShapeShapeShape当作超类,并从中派生出当作超类,并从中派生出当作超类,并从中派生出当作超类,并从中派生出TwoDimensionalShapeTwoDimensionalShapeTwoDimensionalShapeTwoDimensionalShape类和类和类和类和ThreeDimensionalShapeThreeDimensionalShapeThreeDimensionalShapeThreeDimensionalSha
32、pe类。设计类。设计类。设计类。设计这个层次结构,并定义它的所有类。画出相应的类层次结构这个层次结构,并定义它的所有类。画出相应的类层次结构这个层次结构,并定义它的所有类。画出相应的类层次结构这个层次结构,并定义它的所有类。画出相应的类层次结构图。接下来考虑如果将图。接下来考虑如果将图。接下来考虑如果将图。接下来考虑如果将ShapeShapeShapeShape类变成类变成类变成类变成abstractabstractabstractabstract超类,超类,超类,超类,TwoDimensionalShapeTwoDimensionalShapeTwoDimensionalShapeTwoDi
33、mensionalShape类和类和类和类和hreeDimensionalShapehreeDimensionalShapehreeDimensionalShapehreeDimensionalShape类也是类也是类也是类也是abstractabstractabstractabstract类。进行相应的派生后,要求在第三层的类中计算类。进行相应的派生后,要求在第三层的类中计算类。进行相应的派生后,要求在第三层的类中计算类。进行相应的派生后,要求在第三层的类中计算出每个类对应对象的面积和体积。出每个类对应对象的面积和体积。出每个类对应对象的面积和体积。出每个类对应对象的面积和体积。第39页,此
34、课件共68页哦主题三:知识原理掌握主题三:知识原理掌握构造方法的重载构造方法的重载n n建立一个人类(建立一个人类(建立一个人类(建立一个人类(PersonPersonPersonPerson)和学生类()和学生类()和学生类()和学生类(StudentStudentStudentStudent),功能要求如),功能要求如),功能要求如),功能要求如下:下:下:下:n n(1 1 1 1)PersonPersonPersonPerson中包含中包含中包含中包含4 4 4 4个保护型的数据成员个保护型的数据成员个保护型的数据成员个保护型的数据成员namenamenamename、addraddr
35、addraddr、sexsexsexsex、ageageageage,表示姓名、地址、性别和年龄。用一个,表示姓名、地址、性别和年龄。用一个,表示姓名、地址、性别和年龄。用一个,表示姓名、地址、性别和年龄。用一个4 4 4 4参构造方法、参构造方法、参构造方法、参构造方法、一个两参构造方法、一个无参构造方法来实例化对象,用一一个两参构造方法、一个无参构造方法来实例化对象,用一一个两参构造方法、一个无参构造方法来实例化对象,用一一个两参构造方法、一个无参构造方法来实例化对象,用一个输出方法显示个输出方法显示个输出方法显示个输出方法显示4 4 4 4种属性。种属性。种属性。种属性。n n(2 2
36、2 2)StudentStudentStudentStudent类继承类继承类继承类继承PersonPersonPersonPerson类,并增加输出成员类,并增加输出成员类,并增加输出成员类,并增加输出成员mathmathmathmath、englishenglishenglishenglish存放数学、英语成绩。用一个存放数学、英语成绩。用一个存放数学、英语成绩。用一个存放数学、英语成绩。用一个6 6 6 6参构造方法、一个参构造方法、一个参构造方法、一个参构造方法、一个两参构造方法、一个无参构造方法来实例化对象,另外重两参构造方法、一个无参构造方法来实例化对象,另外重两参构造方法、一个无
37、参构造方法来实例化对象,另外重两参构造方法、一个无参构造方法来实例化对象,另外重写输出方法用于显示写输出方法用于显示写输出方法用于显示写输出方法用于显示6 6 6 6种属性。种属性。种属性。种属性。第40页,此课件共68页哦第第3章章 面向对象高级程序设计面向对象高级程序设计3.1 继承继承 3.2多态性多态性3.3 抽象类和抽象方法抽象类和抽象方法3.4接口接口3.5内部类和匿名类内部类和匿名类第41页,此课件共68页哦3.2多态性多态性 多态多态(Polymorphism)(Polymorphism)的意思就是用相同的名字来定义不同的方的意思就是用相同的名字来定义不同的方法。在法。在Jav
38、aJava中,普通类型的多态为重载,这就意味着可以使几个中,普通类型的多态为重载,这就意味着可以使几个不同的方法使用相同的名字,这些方法以参数的个数不同、参数不同的方法使用相同的名字,这些方法以参数的个数不同、参数的类型不同等方面来进行区分,以使得编译器能够进行识别。的类型不同等方面来进行区分,以使得编译器能够进行识别。也可以这样讲,重载是同一个方法具有不同的版本,每个也可以这样讲,重载是同一个方法具有不同的版本,每个版本之间在参数特征方面有差异。重载是版本之间在参数特征方面有差异。重载是JavaJava实现多态性的方实现多态性的方式之一。式之一。例如:例如:family()family()方
39、法可以有三个版本,如下:方法可以有三个版本,如下:family()family()family(String ch)address=ch;family(String ch)address=ch;family(String ch,float n)address=ch;pay=n;family(String ch,float n)address=ch;pay=n;这些方法并存于程序中,编译时,编译器根据实参的类型和个数这些方法并存于程序中,编译时,编译器根据实参的类型和个数来区分从而调用那个方法。如果这些方法作为函数或过程同时出现在来区分从而调用那个方法。如果这些方法作为函数或过程同时出现在其它语
40、言的程序中,如其它语言的程序中,如C C,那将导致灾难性的错误。,那将导致灾难性的错误。第42页,此课件共68页哦3.2多态性多态性【例例例例3-63-6】构造方法重载的例子构造方法重载的例子class person class person String name=Johnson;/String name=Johnson;/姓名姓名 int age=45;/int age=45;/年龄年龄 person()person()person(String a)name=a;person(String a)name=a;person(String a,int b)name=a;age=b;perso
41、n(String a,int b)name=a;age=b;public voiddisplay()System.out.println(Name=+public voiddisplay()System.out.println(Name=+name+,+Age=+age);name+,+Age=+age);public class Polypublic class Poly public static void main(String args)public static void main(String args)person ko1=new person();person ko1=new
42、person();person ko2=new person(Mike);person ko2=new person(Mike);person ko3=new person(Willian,50);person ko3=new person(Willian,50);ko1.display();ko2.display();ko3.display();ko1.display();ko2.display();ko3.display();第43页,此课件共68页哦3.2多态性多态性 在Java语言中,多态性主要体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(运行时多
43、态),如下:1)编译时多态在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来静态确定调用相应的方法。2)运行时多态由于子类继承了父类所有的属性(私有的除外),所以子类对象可以作为父类对象使用。程序中凡是使用父类对象的地方,都可以用子类对象来代替。一个对象可以通过引用子类的实例来调用子类的方法。如果子类重写了父类的方法,那么重写方法的调用原则如下:Java运行时系统根据调用该方法的实例,来决定调用哪个方法。对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法;如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。另外,方法重写时应遵循的原则如下:改写后的方
44、法不能比被重写的方法有更严格的访问权限。改写后的方法不能比被重写的方法有更严格的访问权限。改写后的方法不能比被重写的方法产生更多的异常改写后的方法不能比被重写的方法产生更多的异常。进行方法重写时必须遵从这两个原则,否则编译器会指出程序出错。第44页,此课件共68页哦3.2多态性多态性【例3-7】方法重写的例子class Parent public void function()System.out.println(I am in Parent!);class Child extends Parent private void function()System.out.println(I am
45、in Child!);public class RTpolyTest public static void main(String args)Parent pl=new Parent();Parent p2=new Child();p1.function();p2.function();第45页,此课件共68页哦3.2多态性多态性编译过程如下:D:userchap05Javac RTpolyTest.javaRTpolyTest.java:8:function()in Child cannot override function()in Parent;attempting to assign
46、weaker access privileges;was public private void function()RTpolyTest.java:16:cannot find symbolsymbol :variable p1location:class RTpolyTest p1.function();2 errors可以看出,该程序中实例p2调用function()方法时会导致访问权限的冲突。第46页,此课件共68页哦第第3章章 面向对象高级程序设计面向对象高级程序设计3.1 继承继承 3.2多态性多态性3.3 抽象类和抽象方法抽象类和抽象方法3.4接口接口3.5内部类和匿名类内部类和
47、匿名类第47页,此课件共68页哦3.3 抽象类和抽象方法抽象类和抽象方法 Java语言中,用abstract关键字来修饰一个类时,这个类叫做抽象类。一个abstract 类只关心它的子类是否具有某种功能,并不关心该功能的具体实现,功能的具体行为由子类负责实现的。例如:public abstract class Drawing public abstract void drawDot(int x,int y);public void drawLine(int x1,int y1,int x2,int y2)用abstract来修饰一个方法时,该方法叫做抽象方法。与final类和方法相反,abst
48、ract类必须被继承,abstract方法必须被重写。第48页,此课件共68页哦3.3 抽象类和抽象方法抽象类和抽象方法 当一个类的定义完全表示抽象的概念时,它不应该被实例化为一个对象。例如Java中的Number类就是一个抽象类,它只表示数字这一抽象概念,只有当它作为整数类Integer或实数类Float等的父类时才有意义。定义一个抽象类的格式如下:abstract class abstractClass 由于抽象类不能被实例化,因此下面的语句会产生编译错误:new abstractClass();抽象类中可以包含抽象方法,为所有子类定义一个统一的接口,对抽象方法只需声明,而不需实现,因此它
49、没有方法体。其格式如下:abstrac returnType abstractMethod(paramlist);第49页,此课件共68页哦使用abstract的另一例子abstract class AA abstract void callme();void metoo()System.out.println(InsideAs metoo()method);class BB extends AA void callme()System.out.println(Inside Bs callme()method);public class AAbstract public static void
50、 main(String args)AA cc=new BB();/cc为上转型对象 cc.callme();cc.metoo();第50页,此课件共68页哦第第3章章 面向对象高级程序设计面向对象高级程序设计3.1 继承继承 3.2多态性多态性3.3 抽象类和抽象方法抽象类和抽象方法3.4接口接口3.5内部类和匿名类内部类和匿名类第51页,此课件共68页哦3.4 接口接口3.4.1接口声明接口声明3.4.2使用接口的优点使用接口的优点第52页,此课件共68页哦3.4.1接口声明接口声明从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。通过接口使得