收藏 分销(赏)

Ch03面向对象程序设计.pptx

上传人:天**** 文档编号:4182634 上传时间:2024-08-12 格式:PPTX 页数:116 大小:469.30KB
下载 相关 举报
Ch03面向对象程序设计.pptx_第1页
第1页 / 共116页
Ch03面向对象程序设计.pptx_第2页
第2页 / 共116页
Ch03面向对象程序设计.pptx_第3页
第3页 / 共116页
Ch03面向对象程序设计.pptx_第4页
第4页 / 共116页
Ch03面向对象程序设计.pptx_第5页
第5页 / 共116页
点击查看更多>>
资源描述

1、1主要内容主要内容n类、域、方法和实例对象类、域、方法和实例对象n继承性继承性n多态性多态性n封装性封装性n包包(package)n关键字关键字abstract、static、final和和thisn接口接口n内部类内部类n变量作用域范围和参数传递方式变量作用域范围和参数传递方式n面向对象程序设计基本思想面向对象程序设计基本思想第第1页页/共共116页页2面向对象程序设计整体介绍面向对象程序设计整体介绍n面向对象程序设计面向对象程序设计(OOP)1.将将数据数据(属性属性)和和方法方法(行为或功能行为或功能)封装封装到类到类(classes)中中数据数据与与方法方法常常是紧密相关的常常是紧密相

2、关的2.对象对象(objects):类的实例对象或类本身类的实例对象或类本身3.三个基本特性:三个基本特性:封装性、继承性封装性、继承性和和多态性多态性封装性封装性状态状态 -成员变量成员变量功能功能 -成员方法成员方法继承性继承性在已有类的基础上进行扩展(继承)产生子类在已有类的基础上进行扩展(继承)产生子类实现代码重用和功能的扩充实现代码重用和功能的扩充多态性多态性方法重载(方法重载(overloadoverload)-静态静态方法覆盖(方法覆盖(overwriteoverwrite)-动态动态第第2页页/共共116页页3比较比较n结构化程序设计结构化程序设计1.对应的典型的计算机语言对应

3、的典型的计算机语言,例如例如:C2.面向操作面向操作(action)的的3.函数函数(方法方法)是程序的基本单位是程序的基本单位n面向对象程序设计面向对象程序设计对应的典型的计算机语言对应的典型的计算机语言,例如例如:Java面向面向对象对象(object)的的类类(class)是程序的基本单位是程序的基本单位方法方法(函数函数)被封装在类中被封装在类中数据数据也常常被封装在类中也常常被封装在类中第第3页页/共共116页页4面向对象程序设计的主要工作面向对象程序设计的主要工作n了解已有类的基本情况(了解已有类的基本情况(JFCJFC)n扩展(继承)已有类建立自己的新类扩展(继承)已有类建立自己

4、的新类n创建需要的对象创建需要的对象n实现对象之间的交互来完成系统目标实现对象之间的交互来完成系统目标第第4页页/共共116页页5类n类是组成类是组成JavaJava程序的基本单元程序的基本单元JavaJava程序结构如何?程序结构如何?n类(类型)是用来创建对象(变量)的模板类(类型)是用来创建对象(变量)的模板int a;int a;ClassName a;ClassName a;n类类(class)本身也是一种对象本身也是一种对象n类类(class)同时也是实例对象的模板同时也是实例对象的模板n类类(class)的基本组成:的基本组成:(成员成员)域域和和(成员成员)方法方法 n每个对象

5、:拥有内存每个对象:拥有内存存储成员域存储成员域/方法方法静态的成员静态的成员域域/方法方法属于类属于类其它成员其它成员域域/方法方法属于实例对象属于实例对象第第5页页/共共116页页6类的定义1.1.格式格式 访问修饰符访问修饰符 class ClassName class ClassName 成员变量声明;成员变量声明;/属性属性-状态状态 成员方法声明;成员方法声明;/功能功能-行为行为 2.2.说明说明访问修饰符可以是访问修饰符可以是publicpublic或或省略省略成员变量和成员方法的声明顺序无严格要求成员变量和成员方法的声明顺序无严格要求成员变量定义:成员变量定义:类型类型 变量

6、名或带初始化的变量名列表变量名或带初始化的变量名列表成员方法的定义:成员方法的定义:返回类型返回类型 方法名(参数列表)方法名(参数列表)第第6页页/共共116页页73.3.举例(举例(Example03_Circle.javaExample03_Circle.java)public class Example0301_Circlepublic class Example0301_Circlepublic class Example0301_Circlepublic class Example0301_Circle double r;double r;double r;double r;dou

7、ble s;double s;double s;double s;void setR(double r1)r=r1;void setR(double r1)r=r1;void setR(double r1)r=r1;void setR(double r1)r=r1;double getR()return r;double getR()return r;double getR()return r;double getR()return r;double getS()return Math.PI*r*r;double getS()return Math.PI*r*r;double getS()re

8、turn Math.PI*r*r;double getS()return Math.PI*r*r;r=5.5r=5.5;/此处的语句是非法的,此处的语句是非法的,此处的语句是非法的,此处的语句是非法的,WhyWhy?成成员员变变量量成成员员方方法法举例举例(ExampleCh03_Circle.java)第第7页页/共共116页页81.1.变量的种类变量的种类成员变量成员变量(定义在所有方法的外面定义在所有方法的外面)a)a)实例成员变量(简称实例变量)实例成员变量(简称实例变量)b)b)类成员变量(简称类变量类成员变量(简称类变量 或或 静态变量)静态变量)局部变量局部变量(定义在某方法的内

9、部定义在某方法的内部)a)a)包含形式参数(简称形参)包含形式参数(简称形参)注意:在注意:在JavaJava中没有中没有全局变量全局变量的概念的概念成员变量成员变量第第8页页/共共116页页9n变量的声明变量的声明n实例变量实例变量格式:访问修饰符格式:访问修饰符 类型名类型名 变量名变量名;/public/public,protectedprotected,省略,省略,privateprivateprivate double r;private double r;int s;int s;n类变量类变量格式:访问修饰符格式:访问修饰符 staticstatic 类型名类型名 变量名变量名;p

10、ublic static int a;public static int a;public static final double PI=3.14;public static final double PI=3.14;n局部变量局部变量格式:类型名格式:类型名 变量名变量名;double x;double x;/无访问修饰符无访问修饰符成员变量成员变量第第9页页/共共116页页103.3.说明说明一个类中不允许出现两个同名的成员变量一个类中不允许出现两个同名的成员变量一个方法中不允许出现两个同名的局部变量一个方法中不允许出现两个同名的局部变量类的成员变量可以和方法中的局部变量同名类的成员变量可

11、以和方法中的局部变量同名public class Tom public class Tom int x=98,y,int x=98,y,x x;/error/error void f1()int void f1()int x x=3;y=x;=3;y=x;void f2()y=x;void f2()y=x;public void f3()public void f3()int int a a=y;=y;for(int i=0;i 10;i+)for(int i=0;i 10;i+)int int a a=0;=0;/error/error 成员变量成员变量第第10页页/共共116页页11实例变

12、量和类变量在整个类中有效实例变量和类变量在整个类中有效局部变量只在定义它的复合语句中有效局部变量只在定义它的复合语句中有效若成员变量与局部变量同名,则在局部变量的作若成员变量与局部变量同名,则在局部变量的作用域内成员变量被隐藏(尽量避免重名)用域内成员变量被隐藏(尽量避免重名)public class Tom public class Tom int int x x=98,y=98,y=a a;/error/error;void f1()int void f1()int x x=3;y=3;y=x x;/y=/y=?void f2()y=void f2()y=x x;/y=/y=?public

13、 void f3()public void f3()int a=y;int a=y;for(int i=0;i 10;i+)int b=0;for(int i=0;i 10;i+)int b=0;System.out.println(System.out.println(“b=b=+b);+b);/error/error成员变量成员变量第第11页页/共共116页页12成员方法定义成员方法定义n与与C+C+程序不同的是程序不同的是:每个方法都必须隶属于某个类每个方法都必须隶属于某个类n方法的种类方法的种类1.1.实例方法实例方法2.2.类方法类方法n方法定义的格式方法定义的格式:方法修饰词方法修

14、饰词 返回类型返回类型 方法名方法名(方法的参数列表方法的参数列表)局部变量说明部分;局部变量说明部分;/不一定有不一定有语句部分;语句部分;/一般要有,以实现方法的功能一般要有,以实现方法的功能 /public/public,protectedprotected,省略,省略,privateprivate第第12页页/共共116页页13说明说明:方法名方法名:任何一个合法的标识符任何一个合法的标识符参数列表参数列表:用逗号用逗号(,)分隔开分隔开返回类型返回类型:返回数据的数据类型返回数据的数据类型n除了构造方法,一般要求返回类型除了构造方法,一般要求返回类型:要么为要么为void,要么为某,

15、要么为某种数据类型种数据类型int、byte、float或或Stringn最多只能返回一个值,最多只能返回一个值,没有返回值的方法要用没有返回值的方法要用voidvoid修饰修饰n类方法和实例方法的一个区别:类方法和实例方法的一个区别:staticstatic根据需要选择合适的访问修饰符根据需要选择合适的访问修饰符即使某个方法没有形参,但也要保留即使某个方法没有形参,但也要保留()()public double getArea()public double getArea()double area;double area;area=;area=;return area;return area;

16、static void func(int x)static void func(int x)第第13页页/共共116页页14返回控制返回控制n如果没有值返回如果没有值返回:1.return;/退出该方法退出该方法2.或者遇到该方法的最后一个或者遇到该方法的最后一个“”,则退出该,则退出该方法方法n如果有值返回如果有值返回:1.return 表达式表达式;/退出该方法退出该方法2.返回该表达式的值返回该表达式的值第第14页页/共共116页页15方法重载是指一个类中具有同一个名字的方方法重载是指一个类中具有同一个名字的方法可有不同的签名(参数不同)法可有不同的签名(参数不同)返回值类型和参数名不参

17、与比较返回值类型和参数名不参与比较public void f();public void f();public int f(int a);public int f(int a);public double f(int a,double b);public double f(int a,double b);public double f(double a,int b);public double f(double a,int b);public double f(double a);public double f(double a);public double f(int a);public d

18、ouble f(int a);public double f(int x);public double f(int x);private double f(int x);private double f(int x);static double f(int x);static double f(int x);方法的重载方法的重载第第15页页/共共116页页16构造方法构造方法n构造方法构造方法在创建新的实例对象时起作用在创建新的实例对象时起作用n构造方法构造方法通常用来初始化实例对象,例如通常用来初始化实例对象,例如:初始化成员域或初始化成员域或设置工作环境设置工作环境n构造方法构造方法的特点

19、的特点:1.与类同名与类同名2.没有返回值没有返回值n可以含有多种可以含有多种构造方法构造方法(重载重载)但必须具有不同的参数列表但必须具有不同的参数列表第第16页页/共共116页页17默认的构造方法默认的构造方法n n如果没有显式地定义类的构造方法,则系统会为该如果没有显式地定义类的构造方法,则系统会为该如果没有显式地定义类的构造方法,则系统会为该如果没有显式地定义类的构造方法,则系统会为该类定义一个默认的构造方法。该构造方法不含任何类定义一个默认的构造方法。该构造方法不含任何类定义一个默认的构造方法。该构造方法不含任何类定义一个默认的构造方法。该构造方法不含任何参数。参数。参数。参数。这个

20、默认的构造方法首先调用其父类的不含任何参数的这个默认的构造方法首先调用其父类的不含任何参数的构造方法,然后初始化新生成的实例的各个成员域变量构造方法,然后初始化新生成的实例的各个成员域变量 默认值默认值:基本数值类型基本数值类型:0 0;booleanboolean:falsefalse;引用数据类型引用数据类型:nullnull最好自己写构造方法最好自己写构造方法n n一旦在类中定义了构造方法,系统就不会再创建这一旦在类中定义了构造方法,系统就不会再创建这一旦在类中定义了构造方法,系统就不会再创建这一旦在类中定义了构造方法,系统就不会再创建这个默认的不含参数的构造方法。个默认的不含参数的构造

21、方法。个默认的不含参数的构造方法。个默认的不含参数的构造方法。第第17页页/共共116页页18构造方法示例构造方法示例public class Circle public class Circle private double r;private double r;public Circle()r=1.0;public Circle()r=1.0;/(1)/(1)public Circle(double r1)r=r1;public Circle(double r1)r=r1;/(2)/(2)public void Circle()r=5;public void Circle()r=5;/(3

22、)/(3)是否是构造方法?该类共有几个构造方法?是否是构造方法?该类共有几个构造方法?若去掉若去掉后共有几个构造方法?后共有几个构造方法?r=r=?若去掉若去掉后共有几个构造方法?后共有几个构造方法?r=r=?若去掉若去掉和和后共有几个构造方法?后共有几个构造方法?r=r=?第第18页页/共共116页页19n n最终方法是一种用最终方法是一种用最终方法是一种用最终方法是一种用finalfinalfinalfinal关键字修饰的方法关键字修饰的方法关键字修饰的方法关键字修饰的方法n n最终方法不能被子类重写,但可重载最终方法不能被子类重写,但可重载最终方法不能被子类重写,但可重载最终方法不能被子

23、类重写,但可重载public class Tom public class Tom public public finalfinal void func()void func()最终方法最终方法第第19页页/共共116页页20n抽象方法是一种用抽象方法是一种用abstractabstract关键字修饰的方法关键字修饰的方法n抽象方法只声明,不实现(没有方法体)抽象方法只声明,不实现(没有方法体)n抽象方法一般都要被子类重写,抽象类一般由子类继承,抽象方法一般都要被子类重写,抽象类一般由子类继承,且子类要实现其中所有的抽象方法;否则子类也要声明且子类要实现其中所有的抽象方法;否则子类也要声明为抽

24、象的为抽象的n抽象类的对象抽象类的对象不能用不能用newnew创建创建n抽象类中可以没有抽象方法抽象类中可以没有抽象方法n若一个类中含有抽象方法则该类必须为抽象类(若一个类中含有抽象方法则该类必须为抽象类(注意注意TomTom类的定义类的定义)n思考:思考:finalfinal和和abstractabstract是否可同时修饰一个方法是否可同时修饰一个方法public public abstractabstract class Tom class Tom public public abstractabstract void func();void func();抽象方法抽象方法第第20页页/

25、共共116页页21n n对象的概念对象的概念n对象是一个动态概念,具有产生、使用和消亡的生命对象是一个动态概念,具有产生、使用和消亡的生命周期周期n通过通过newnew操作符创建对象操作符创建对象n对象属性的使用:对象属性的使用:n对象名对象名.属性;属性;n对象方法的使用:对象方法的使用:n对象名对象名.方法名();方法名();n当对象不再使用时,将由系统的垃圾回收机制进行回当对象不再使用时,将由系统的垃圾回收机制进行回收。收。对象对象第第21页页/共共116页页22n n格式:格式:格式:格式:访问修饰符访问修饰符访问修饰符访问修饰符 类名类名类名类名 对象名;对象名;对象名;对象名;n

26、n例如例如例如例如class ClassName class ClassName class ClassName class ClassName private String s;private String s;private String s;private String s;Circle circle;Circle circle;Circle circle;Circle circle;public String func()public String func()public String func()public String func()public final ClassName

27、a;public final ClassName a;public final ClassName a;public final ClassName a;return return return return The String is:The String is:The String is:The String is:+s;+s;+s;+s;n n与基本数据类型的变量声明格式类似与基本数据类型的变量声明格式类似与基本数据类型的变量声明格式类似与基本数据类型的变量声明格式类似对象的声明对象的声明第第22页页/共共116页页23n格式:格式:对象名对象名 =new=new 类的构造方法类的构造方

28、法(实参表实参表););n例如例如nCircle circle1,circle2;Circle circle1,circle2;ncircle1=new Circle();circle1=new Circle();ncircle2=new Circle(5.5);circle2=new Circle(5.5);nString s=new String(String s=new String(Hello!Hello!););对象的创建对象的创建第第23页页/共共116页页24n对象赋值对象赋值格式:格式:对象名对象名 =对象名对象名;对赋值号右边对象的要求:同类或子类对赋值号右边对象的要求:同类

29、或子类n访问变量访问变量格式:格式:对象名对象名.变量名变量名对于类变量常用:对于类变量常用:类名类名.变量名变量名n访问方法访问方法格式:格式:对象名对象名.方法名(实参表)方法名(实参表)对于类方法常用:对于类方法常用:类名类名.方法名(实参表)方法名(实参表)对象的使用对象的使用第第24页页/共共116页页加载类加载类A A时,类变量时,类变量j j和类方法和类方法k k即被分配内存即被分配内存nullnulla1a2A0kj0 xCD010 xAB01nulla2f0 xCD260 xCD010 xCD260 xAB010 xAC02kfji00 xA002a10 xA002k0 xC

30、D01f0 xCD26j0 xAB01i00 xBC010 xA0C0A a1,a2;A a1,a2;a1=new A();a1=new A();a2=a1;a2=a1;a2=new A();a2=new A();class Aclass A int i;/int i;/实例变量实例变量 static int j;/static int j;/类变量类变量 public float f(int a1,int a2)/public float f(int a1,int a2)/实例方法实例方法 public static float k(int a)/public static float k(

31、int a)/类方法类方法 第第25页页/共共116页页26说明说明:(:(1 1)常用常用类名类名直接访问该类的静态成员直接访问该类的静态成员 (2 2)静态方法静态方法只能访问静态成员只能访问静态成员 (3 3)实例方法实例方法可以访问静态成员和实例成员可以访问静态成员和实例成员public class Test public class Test static int I;static int I;int a;int a;public void f()g();double pi=Math.PI;public void f()g();double pi=Math.PI;public sta

32、tic void g()f();/error public static void g()f();/errorint s=I;int s=I;public static void main(String args)public static void main(String args)f();/errorf();/errorg();g();int s=Test.I;int s=Test.I;new Test().f();new Test().f();System.out.println(new Test().I);System.out.println(new Test().I);对象对象第第2

33、6页页/共共116页页类的创建和对象使用示例类的创建和对象使用示例n n编写一个课程类编写一个课程类编写一个课程类编写一个课程类CourseCourse,包含:,包含:,包含:,包含:3 3个成员变量:课程编号(个成员变量:课程编号(个成员变量:课程编号(个成员变量:课程编号(cNumbercNumber)、课程名)、课程名)、课程名)、课程名(cName)(cName)和学和学和学和学分数分数分数分数(cUnit)(cUnit);1 1个方法:个方法:个方法:个方法:printCourseInfoprintCourseInfo:用于输出课程的相关信息;:用于输出课程的相关信息;:用于输出课程

34、的相关信息;:用于输出课程的相关信息;n n编写编写编写编写CourseCourse类的测试程序类的测试程序类的测试程序类的测试程序(main(main方法方法方法方法),创建课程对象:,创建课程对象:,创建课程对象:,创建课程对象:编号为编号为编号为编号为112101112101,课程名为,课程名为,课程名为,课程名为JavaJava程序设计,学分为程序设计,学分为程序设计,学分为程序设计,学分为3 3。要求。要求。要求。要求输出课程的相关信息。输出课程的相关信息。输出课程的相关信息。输出课程的相关信息。27第第27页页/共共116页页面向过程编程与面向对象编程比较面向过程编程与面向对象编程

35、比较n实例:编写求解长方形面积和周长的程序实例:编写求解长方形面积和周长的程序1.1.面向过程的编程方法面向过程的编程方法确定长方形周长和面积的算法。确定长方形周长和面积的算法。编写两个方法(函数)分别计算长方形的周长和面积编写两个方法(函数)分别计算长方形的周长和面积求周长的方法(函数)和求面积的方法(函数)需要求周长的方法(函数)和求面积的方法(函数)需要两个参数,分别是长方形的长和宽两个参数,分别是长方形的长和宽。2.2.面向对象的编程方法面向对象的编程方法一个长方形可以看成一个长方形对象。一个长方形可以看成一个长方形对象。一个长方形对象有两个状态(长和宽)和两个行为一个长方形对象有两个

36、状态(长和宽)和两个行为(求周长和求面积)。(求周长和求面积)。将所有长方形的共性抽取出来,设计一个长方形类。将所有长方形的共性抽取出来,设计一个长方形类。通过长方形对象的行为,就可以求出某个具体的长方通过长方形对象的行为,就可以求出某个具体的长方形对象的周长和面积。形对象的周长和面积。28第第28页页/共共116页页面向过程编程与面向对象编程比较面向过程编程与面向对象编程比较n结构化程序设计方法与面向对象程序设计方法结构化程序设计方法与面向对象程序设计方法地比较:地比较:1.1.结构化程序设计结构化程序设计侧重于功能抽象,强调确定和分解系侧重于功能抽象,强调确定和分解系统的功能统的功能。其缺

37、点:。其缺点:功能分解的随意性大功能分解的随意性大系统功能最不稳定,易变化系统功能最不稳定,易变化2.2.面向对象程序设计面向对象程序设计侧重于描述系统结构,侧重于描述系统结构,功能抽象功能抽象数据抽象数据抽象,其优点:,其优点:系统结构相对稳定系统结构相对稳定灵活的机制,如继承、多态和动态绑定有利于修灵活的机制,如继承、多态和动态绑定有利于修改和扩充系统功能改和扩充系统功能29第第29页页/共共116页页30主要内容n类、域、方法和实例对象类、域、方法和实例对象n继承性继承性n多态性多态性n封装性封装性n包包(package)n关键字关键字abstract、static、final和和thi

38、sn接口接口n内部类内部类n变量作用域范围和参数传递方式变量作用域范围和参数传递方式n面向对象程序设计基本思想面向对象程序设计基本思想第第30页页/共共116页页31继承性n继承是继承是OOPOOP中实现代码重用的一种方式中实现代码重用的一种方式n继承是一种从已有的类创建子类的机制继承是一种从已有的类创建子类的机制n子类继承已有类的状态和行为,并可以扩充子类继承已有类的状态和行为,并可以扩充n由继承而得到的类叫由继承而得到的类叫子类子类,被继承的类叫,被继承的类叫超类(父类)超类(父类)nJavaJava不支持多继承(子类只能有一个直接超类)不支持多继承(子类只能有一个直接超类)n处于处于Ja

39、vaJava类层次结构顶端的是类层次结构顶端的是ObjectObject类类n在未指定超类的类定义中,默认超类为在未指定超类的类定义中,默认超类为ObjectObject第第31页页/共共116页页JavaJava的继承结构的继承结构n继承具有传递性继承具有传递性1.1.子类继承沿继承路径向上的所有父类的有关子类继承沿继承路径向上的所有父类的有关属性和方法。属性和方法。nJavaJava的继承结构的继承结构ObjectObjectB类类C类类ObjectA类类B1类类B2类类B22B11类类B21类类第第32页页/共共116页页33继承性的实现n格式格式 访问修饰符访问修饰符 class cl

40、ass 子类名子类名 extendsextends 超类名超类名 n示例示例 import javax.swing.*;import javax.swing.*;public class MyClasspublic class MyClass extends JFrame extends JFrame 第第33页页/共共116页页34关键字:instanceofn运算符运算符:instanceofn例如例如:if(p instanceof Circle)上面的条件为上面的条件为 true,当且仅当引用当且仅当引用p所指向的所指向的对象是类对象是类Circle(或其子类或其子类)的实例对象的实例

41、对象第第34页页/共共116页页this和和supern每个类中有两个隐含的对象每个类中有两个隐含的对象thisthis与与supersuper:1.1.thisthis是代表本类的一个对象是代表本类的一个对象,可以通过可以通过this.this.属性属性的形式的形式来引用本类的属性;来引用本类的属性;2.2.supersuper是代表父类的一个对象,可以通过是代表父类的一个对象,可以通过super.super.属性属性的的形式来引用父类的属性;形式来引用父类的属性;3.3.使用使用thisthis与与supersuper可以解决父类属性被隐藏的情况;可以解决父类属性被隐藏的情况;n如果在方法

42、内部也有与类成员属性同名的变量,可以这样如果在方法内部也有与类成员属性同名的变量,可以这样来区分它们(以变量名为来区分它们(以变量名为x x为例):为例):1.1.x x:代表方法的局部变量代表方法的局部变量2.2.this.xthis.x:代表本类的成员属性值代表本类的成员属性值3.3.super.xsuper.x:代表从父类继承下来的但被隐藏的代表从父类继承下来的但被隐藏的x x值值第第35页页/共共116页页36nthisthis是一个代表当前对象的特殊关键字是一个代表当前对象的特殊关键字nthisthis只能用在实例方法中,不能出现在类方法中只能用在实例方法中,不能出现在类方法中n通过

43、通过thisthis调用构造方法时只能是第调用构造方法时只能是第1 1条语句条语句class A class A int i;int i;public A(int i)public A(int i)this.i this.i=i;=i;public A(int i,int y)public A(int i,int y)this(i);this(i);this.i+=y;this.i+=y;void f()int i=3;void f()int i=3;this.i=i+5;this.i=i+5;this关键字关键字第第36页页/共共116页页37n nsupersupersupersuper是

44、一个代表超类的特殊关键字是一个代表超类的特殊关键字是一个代表超类的特殊关键字是一个代表超类的特殊关键字n nsupersupersupersuper只能用在实例方法中,不能用在类方法中只能用在实例方法中,不能用在类方法中只能用在实例方法中,不能用在类方法中只能用在实例方法中,不能用在类方法中n n用用用用supersupersupersuper调用超类的构造方法时只能是第调用超类的构造方法时只能是第调用超类的构造方法时只能是第调用超类的构造方法时只能是第1 1 1 1条语句条语句条语句条语句n n子类的每个构造方法都必须显示子类的每个构造方法都必须显示子类的每个构造方法都必须显示子类的每个构造

45、方法都必须显示/隐式地调用超类的某个隐式地调用超类的某个隐式地调用超类的某个隐式地调用超类的某个构造方法构造方法构造方法构造方法class A class A int i;int i;A(int i)A(int i)this.i=i;this.i=i;void Aa()void Aa()class B extends A class B extends A int i;int i;B(int i,int j)B(int i,int j)super(i);/super(i);/去掉此句会出错去掉此句会出错 super.Aa();super.Aa();this.i=super.i+j;this.i

46、=super.i+j;super关键字关键字第第37页页/共共116页页继承规则继承规则父类父类 publicdefaultprotected private同一包中同一包中子类子类publicdefaultprotected不被继承不被继承38第第38页页/共共116页页39n构造方法是构造方法是不可以继承不可以继承的的n子类的每个构造方法都子类的每个构造方法都必须在一开始调用父类的某一个构必须在一开始调用父类的某一个构造方法造方法;若子类的构造方法;若子类的构造方法未显式调用未显式调用父类的构造方法,则父类的构造方法,则系统默认系统默认调用的是父类的无参构造方法调用的是父类的无参构造方法,

47、此时如果父类中不,此时如果父类中不存在无参的构造方法,就会出错存在无参的构造方法,就会出错n n创建子类对象时发生的事情创建子类对象时发生的事情创建子类对象时发生的事情创建子类对象时发生的事情若有若有若有若有 C extends BC extends BC extends BC extends B,B extends AB extends AB extends AB extends A,A extends ObjectA extends ObjectA extends ObjectA extends Object则当有则当有则当有则当有 C c=new C();C c=new C();C c=

48、new C();C c=new C();时,时,时,时,由于构造方法的调用规则,会沿着继承分支依次向上调用其由于构造方法的调用规则,会沿着继承分支依次向上调用其由于构造方法的调用规则,会沿着继承分支依次向上调用其由于构造方法的调用规则,会沿着继承分支依次向上调用其祖先的构造方法,当到达根节点祖先的构造方法,当到达根节点祖先的构造方法,当到达根节点祖先的构造方法,当到达根节点(Object)(Object)(Object)(Object)时,即开始沿着继时,即开始沿着继时,即开始沿着继时,即开始沿着继承分支依次向下创建各父节点对象,一直到创建承分支依次向下创建各父节点对象,一直到创建承分支依次向

49、下创建各父节点对象,一直到创建承分支依次向下创建各父节点对象,一直到创建C C C C节点对象,节点对象,节点对象,节点对象,这才完成了这才完成了这才完成了这才完成了c c c c对象的创建过程对象的创建过程对象的创建过程对象的创建过程继承规则继承规则第第39页页/共共116页页402 2、子类的成员变量与超类中、子类的成员变量与超类中同名同名的情况的情况class A class A int i;int i;A(int i)A(int i)this.i=i;this.i=i;class B extends A class B extends A int i;int i;B(int i,int

50、 j)B(int i,int j)super(i);super(i);this.i=this.i+super.i+j;this.i=this.i+super.i+j;public class Example03_ThisSuper public class Example03_ThisSuper public static void main(String args)public static void main(String args)A a=new A(1);A a=new A(1);B b=new B(3,4);B b=new B(3,4);System.out.println(a.i)

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服