1、JavaJava程序设计程序设计电子课件电子课件2019-5-111谢谢观赏第第1篇篇 核心基础篇核心基础篇第第 3 3 章章 JavaJava面向对象特性面向对象特性2019-5-112谢谢观赏本章内容本章内容3.1 类与对象类与对象3.2 隐藏和封装隐藏和封装3.3 类的继承与多态类的继承与多态3.4 数组数组2019-5-113谢谢观赏学习目标学习目标1. 掌握对象与类的基本概念掌握对象与类的基本概念2. 了解对象的生命周期了解对象的生命周期3. 熟练掌握类的定义及实例化熟练掌握类的定义及实例化4. 理解隐藏与封装理解隐藏与封装5. 熟练掌握类的继承与多态熟练掌握类的继承与多态6. 掌握
2、数组的应用掌握数组的应用2019-5-114谢谢观赏本章概要本章概要1. Java中类和对象的定义;中类和对象的定义;2. Java对对OOP三个主要特性三个主要特性封装封装、继承和多态的支持机制;、继承和多态的支持机制;3. Java中的对象数组这种数据结构。中的对象数组这种数据结构。2019-5-115谢谢观赏3.1 类与对象类与对象1.类与对象的定义类与对象的定义2.成员变量与局部变量成员变量与局部变量3.成员方法成员方法4.对象的创建对象的创建5.对象的使用对象的使用6.对象的消除对象的消除7.方法重载方法重载8.this9.构造方法构造方法2019-5-116谢谢观赏3.1.1 类和
3、对象的定义类和对象的定义Java程序是由程序是由一个或若干个类一个或若干个类组组成,类是成,类是Java程序的程序的基本组成单基本组成单位位,包括:,包括: 成员变量:描述对象的属性成员变量:描述对象的属性 成员方法:描述对象的行为成员方法:描述对象的行为2019-5-117谢谢观赏类定义的结构类定义的结构2019-5-118谢谢观赏1. 类的声明格式类的声明格式 public abstract | final class extends superClassName implements interfaceNameList 类的访问权限及其属性类的访问权限及其属性类定义关键字类定义关键字类名
4、类名继承某个父类的关键继承某个父类的关键字字 实现接口的关键字实现接口的关键字 2019-5-119谢谢观赏2. 类体类体 构造和初始化新对象的构造方法;构造和初始化新对象的构造方法; 表示类及其对象状态的变量;表示类及其对象状态的变量; 实现类及其对象的方法;实现类及其对象的方法; 进行对象清除的进行对象清除的finalize()finalize()方法。方法。 2019-5-1110谢谢观赏3.1.2 成员变量与局部变量成员变量与局部变量成员变量(类):成员变量(类):在类体中声明的变量,且不属于任何在类体中声明的变量,且不属于任何一个方法时。一个方法时。 局部变量:局部变量:在方法体中声
5、明的变量以及方法的参在方法体中声明的变量以及方法的参数则统称为方法的局部变量。数则统称为方法的局部变量。 2019-5-1111谢谢观赏【例3-1】成员变量示例public class Apple public String color; / 公共变量color public static int num; / 静态变量num public final boolean MATURE=true; / 常量MATURE并赋值 public static void main(String args) System.out.println(苹果数量:+Apple.num); Apple apple=n
6、ew Apple(); System.out.println(苹果颜色:+apple.color); System.out.println(苹果是否成熟:+apple.MATURE); num是类变量(即静态变量),可通过类名直接访问是类变量(即静态变量),可通过类名直接访问2019-5-1112谢谢观赏2. 局部变量局部变量final ; 指定局部变量为常量指定局部变量为常量局部变量的参数类型局部变量的参数类型局部变量的名称局部变量的名称2019-5-1113谢谢观赏【例例3-2】局部变量的使用局部变量的使用1.public class Apple 2. String color=Red;
7、3. float price; 4. public String getColor() 5. return color;6. 7. public float count()8. int num; 9. if(num0) 10. return 0;11. else12. return price*num;13. 成员变量成员变量错误语句,因为局错误语句,因为局部变量部变量num还没有还没有被赋值就使用被赋值就使用2019-5-1114谢谢观赏14. public static void main(String args) 15. Apple apple=new Apple();16. Syste
8、m.out.println(苹果总价钱:苹果总价钱:+apple.count();17. 18. 2019-5-1115谢谢观赏 概念:概念: 指该变量在程序代码中的指该变量在程序代码中的作用区域作用区域,在,在该区域外该区域外不能直接访问不能直接访问变量。变量。 生命周期:生命周期: 指从声明一个变量并指从声明一个变量并分配内存空间分配内存空间、使使用变量开始用变量开始,然后,然后释放释放该变量并该变量并清除清除所所占用内存空间的一个占用内存空间的一个过程过程。3. 变量的有效范围变量的有效范围2019-5-1116谢谢观赏变量的种类:变量的种类: 成员变量成员变量类体中声明的成员类体中声明
9、的成员变量在整个类中有效。变量在整个类中有效。 局部变量局部变量在方法内或方法内在方法内或方法内的复合代码块的复合代码块(方法内部,方法内部,“”与与“”之间的代码之间的代码)声明的变量。声明的变量。2019-5-1117谢谢观赏【例例3-3】变量的有效范围变量的有效范围 1.public class Olympics1 2. private int medal_All=800;3. public void China() 4. int medal_CN=100;5. if(medal_CN1000) 6. int gold=50;7. medal_CN+=30;8. medal_All-=1
10、30;9. 10. 11.成员变量成员变量代码块外、方法代码块外、方法体内的局部变量体内的局部变量代码块的局部变量代码块的局部变量允许访问本方法的允许访问本方法的局部变量局部变量 允许访问本类的成员变量允许访问本类的成员变量 2019-5-1118谢谢观赏3.1.3 成员方法成员方法返回值类型返回值类型 方法名称方法名称 / /方法开始标记方法开始标记 / /方法结束标记方法结束标记 方法主体方法主体 ( (参数参数1 1,参数,参数2 2, 参数参数n) n) 2019-5-1119谢谢观赏注意:注意: 方法体中定义的方法体中定义的局部变量局部变量的作用域只的作用域只在方法内部;在方法内部;
11、 如果局部变量的名字和类的成员变量如果局部变量的名字和类的成员变量名字相同,则名字相同,则类的成员变量类的成员变量被屏蔽;被屏蔽; 如果要在方法中使类的成员变量有效如果要在方法中使类的成员变量有效,则可以使用,则可以使用this关键字。关键字。2019-5-1120谢谢观赏public class Olympics2 private int gold=0; private int silver=0;private int copper=0;public void changeModel(int a,int b,int c) gold=a; / 给类的成员变量赋值 int silver= b;
12、/ 使同名类成员变量silver隐藏 int copper= 50; / 使同名类成员变量copper隐藏 System.out.println(“In changModel:”+“金牌 =”+gold+“ 银牌=”+silver+“ 铜牌+copper); this.copper=c; / 给类成员变量z赋值2019-5-1121谢谢观赏String getModel( ) return “金牌 = ”+gold+“ 银牌 =”+silver+“ 铜牌=+copper;2019-5-1122谢谢观赏public static void main( String args ) Olympics
13、2 o2=new Olympics2( ); System.out.println(Before changModel:+o2.getModel(); o2.changeModel(100,100,100);System.out.println(After changeModel:+o2.getModel();Befor changModel: 金牌=0 银牌=0 铜牌=0gold=100 silver=100 copper=50In changModel: 金牌=100 银牌=100 铜牌=50After changModel: 金牌=100 银牌=0 铜牌=100如果在方法中对成员变量的值
14、进行了修改,则这种修改将是永久的。gold=0 silver=0 copper=02019-5-1123谢谢观赏3.1.4 对象的创建对象的创建一个对象的生命周期包括三个一个对象的生命周期包括三个阶段:阶段: 对象的创建对象的创建 对象的使用对象的使用 对象的消除对象的消除 2019-5-1124谢谢观赏创建对象创建对象 创建对象创建对象 声明声明 实例化实例化 初始化初始化 类类 对象名称对象名称 newnew 构造方法(参数)构造方法(参数) public public classclass Point Point int x=1; int x=1; int y=1; int y=1; p
15、ublic Point(int x,int y) public Point(int x,int y) this.x=x; this.x=x; this.y=y; this.y=y; /实例化实例化Point类,创建对象类,创建对象ptPoint pt Point pt = = newnew Point( Point(2,32,3); ); 2019-5-1125谢谢观赏Point pt = new Point(2,3);2019-5-1126谢谢观赏3.1.5 对象的使用对象的使用1. 引用对象的变量引用对象的变量objectReference.variableName;2. 调用对象的方法调
16、用对象的方法objectReference.methodName(argumentList)2019-5-1127谢谢观赏【例例3-6】对象使用的示例对象使用的示例 1.public class Point 2. int x=1;3. int y=1;4. public void setXY(int x,int y) 5. public int getXY() 6. public static void main(String args) 7.Point pt=new Point(); 8.pt.x=2; 9.System.out.println(x与y的乘积为:+pt.getXY();10.
17、pt.setXY(3,2); 11.System.out.println(x与y的乘积为:+pt.getXY(); 12. 13.成员变量成员变量成员方法成员方法声明并创建声明并创建Point类的对象类的对象pt访问对象访问对象pt的成员变量的成员变量x调用成员方法调用成员方法 2019-5-1128谢谢观赏3.1.6 对象的消除对象的消除在在C+中中,程序员要显式地删除不用的对,程序员要显式地删除不用的对象,即手动释放对象占用的存储空间。象,即手动释放对象占用的存储空间。 Java提供了垃圾回收提供了垃圾回收(garbage collection)机制机制:自动判断对象是否还在:自动判断对象
18、是否还在使用,并自动销毁不再使用的对象,回收使用,并自动销毁不再使用的对象,回收对象所占用的资源。对象所占用的资源。 2019-5-1129谢谢观赏Java垃圾回收器执行机制的生命周期垃圾回收器执行机制的生命周期2019-5-1130谢谢观赏3.1.7 方法的重载方法的重载在同一个类中定义了多个在同一个类中定义了多个同名而内容同名而内容不同不同的成员方法。的成员方法。 classScreen public void print( int i) public void print( float i) public void print( int i, String str ) 2019-5-11
19、31谢谢观赏方法重载方法重载原则:原则: 参数表必须不同:参数表必须不同: 方法参数的个数不同方法参数的个数不同 参数类型不同参数类型不同 返回类型、修饰符返回类型、修饰符 返回类型返回类型2019-5-1132谢谢观赏【例3-7】方法重载的示例 1.public class Calculate 2. final float PI=3.14159f;3. public float getArea(float r) 4. return PI*r*r;5. 6. public float getArea(float l,float w) 7. return l*w;8. 9. public voi
20、d draw(int num) 10. System.out.println(画+num+个任意形状的图形);11. 12. public void draw(String shape) 13. System.out.println(画一个+shape);14. 方法重载方法重载方法重载方法重载2019-5-1133谢谢观赏15. public static void main(String args) 16. Calculate c=new Calculate(); /创建Calculate类的对象17.float l=20;18.float w=40;19.System.out.print
21、ln(求长为+l+宽为+w+的矩形面积是:+c.getArea(l,w);20.float r=6;21.System.out.println(求半径为+r+的圆形面积是:+c.getArea(r);22. int num=8;23. c.draw(num);24. c.draw(“矩形”);25. 26.通过传递的参数判通过传递的参数判断调用哪个方法断调用哪个方法通过传递的参数判通过传递的参数判断调用哪个方法断调用哪个方法2019-5-1134谢谢观赏3.1.8 关键词关键词this用来指向对象自身用来指向对象自身 用来访问当前对象的数据成员用来访问当前对象的数据成员; 用来访问当前对象的成
22、员方法用来访问当前对象的成员方法; 重载构造方法时,用来引用同类的重载构造方法时,用来引用同类的其他构造方法。其他构造方法。2019-5-1135谢谢观赏【例3-8】this关键字的使用 1.public class Fruit 2.String color=绿色;3.double price;4.int num;5.14.public double count(double price, int num) 15. this.price=price; 16. this.num=num; 17. return price*num;18.19.23.成员变量成员变量将参数值赋值给成员变将参数值赋值
23、给成员变量,即指向对象自身。量,即指向对象自身。2019-5-1136谢谢观赏3.1.9 类的构造方法类的构造方法功能:功能:初始化类的成员变量初始化类的成员变量特点:特点: 名称必须与类名相同名称必须与类名相同 不能有返回值不能有返回值 必须用必须用new自动调用自动调用2019-5-1137谢谢观赏【例3-9】在类Apple中定义两个构造方法 1.public class Apple 2. private int num; 3. private double price;4. public Apple() 5.num=10;6.price=2.34;7. 8. public Apple(i
24、nt num,double price) 9.this.num=num;10.this.price=price;11. 12.16. public static void main(String args)17. Apple a1=new Apple();18. Apple a2=new Apple(50,3.15)19. 21. 22.参参数数化化构构造造方方法法2019-5-1138谢谢观赏2. 缺省构造方法缺省构造方法如果在类定义中无构造函数,在编译如果在类定义中无构造函数,在编译时可缺省加入构造方法。如:时可缺省加入构造方法。如: public Apple( ) ;一旦在类中有一个自己
25、声明的构造函一旦在类中有一个自己声明的构造函数,则缺省的构造函数将不被加到源数,则缺省的构造函数将不被加到源程序中。程序中。2019-5-1139谢谢观赏3. 构造方法的重载构造方法的重载功能:功能: 使类对象具有不同的初始值,使类对象具有不同的初始值,为对象的初始化提供方便。为对象的初始化提供方便。可以使用可以使用this调用重载的构造调用重载的构造方法。方法。2019-5-1140谢谢观赏【例例3-10】对类对类Apple的构造方法进行重载的构造方法进行重载 class Apple private String color;private int num;public Apple(Stri
26、ng c, int n) color = c ;num = n;public Apple( String c) this(c,0); 调用两个参数的构造方法2019-5-1141谢谢观赏class Apple private String color;private int num;public Apple( String c) this(c,0); public Apple( ) this(Unknown); 调用一个参数的构造方法2019-5-1142谢谢观赏class Apple private String color;private int num; public String ge
27、tColor() return color;public int getNum() return num; 2019-5-1143谢谢观赏public class AppleDemo public static void main(String args) Apple applee = new Apple();System.out.println(“苹果颜色苹果颜色: ”+e.getColor(); System.out.println(“苹果数量苹果数量: ”+e.getNum();调用无参数:this(“Unknown”); 1个参数:this(c,0);2个参数的构造方法2019-5-1
28、144谢谢观赏3.2 隐藏与封装隐藏与封装1. 封装封装2. 访问控制访问控制3. package和和import2019-5-1145谢谢观赏3.2.1 封装封装封装,是指将封装,是指将对象的数据对象的数据与操作数据的与操作数据的方方法法相结合,通过相结合,通过方法方法将对象的数据与实现将对象的数据与实现细节保护起来。细节保护起来。 在类的定义中设置访问对象属性及方法的权在类的定义中设置访问对象属性及方法的权限,来限制该类对象及其他类的对象的使用限,来限制该类对象及其他类的对象的使用范围。范围。提供一个接口来描述其他对象的使用方法。提供一个接口来描述其他对象的使用方法。2019-5-1146
29、谢谢观赏3.2.2 访问控制访问控制 私有的私有的以以private修饰符指定;修饰符指定; 保护的保护的以以protected修饰符指定;修饰符指定; 公开的公开的以以public修饰符指定;修饰符指定; 默认的默认的,也称为,也称为default或或package不使用任何修饰符不使用任何修饰符指定。指定。2019-5-1147谢谢观赏表表3-1:4种访问权限及其含义种访问权限及其含义可否直接访问可否直接访问 同一个同一个 同一个同一个 不同包中的不同包中的 任何任何 控制等级控制等级 类中类中 包中包中 子类中子类中 场合场合private Yesdefault Yes Yesprote
30、cted Yes Yes Yespublic Yes Yes Yes Yes2019-5-1148谢谢观赏1. private修饰符修饰符其成员只能在所在类的其成员只能在所在类的内部使用内部使用,在,在其他的类中则不允许其他的类中则不允许直接访问直接访问。同一个类的同一个类的不同对象之间不同对象之间可以访问对可以访问对方的方的private成员变量和方法;成员变量和方法; 访问控制是在类的级别上,而不是在对访问控制是在类的级别上,而不是在对象的级别上。象的级别上。2019-5-1149谢谢观赏class Parent private int privateVar; private void p
31、rivateMethod() System.out.println(“I am privateMethod!); class Child void accessMethod() Parent p = new Parent(); p.privateVar=100; p.privateMethod(); 类中的私有成员类中的私有成员 非法:非法:无法通过无法通过类类ParentParent的对象的对象访问它的私有成员访问它的私有成员 2019-5-1150谢谢观赏class Parent private int privateVar; public Parent( int p) privateVa
32、r=p; boolean isEqualTo(Parent anotherParent) if (this. privateVar=anotherParent.privateVar) return true; else return false; 当前对象实例的成员变量与方法的参数传递的另一个对象实例的成员变量是否相等?2019-5-1151谢谢观赏public class PrivateDemo public static void main(String args ) Parent p1=new Parent(20); Parent p2=new Parent(40); System.ou
33、t.println(p1.isEqualTo(p2); 执行结果:执行结果:false2019-5-1152谢谢观赏2. default如果一个类没有显式地设置成员的访问控制级如果一个类没有显式地设置成员的访问控制级别,则说明它使用的是别,则说明它使用的是默认的默认的访问权限,称为访问权限,称为default或或package。 允许被这个允许被这个类本身类本身,或者,或者相同包相同包中的其它类中的其它类访问其访问其default成员。成员。 构造方法设置为构造方法设置为default权限时,则除这个权限时,则除这个类类本身和同一个包中的类本身和同一个包中的类以外,其他类均不能以外,其他类均不
34、能生成该类的对象实例。生成该类的对象实例。2019-5-1153谢谢观赏package p1;class Parent int packageVar; void packageMethod() System.out.println(“I am packageMethod!); package p1;class Child void accessMethod() Parent p = new Parent(); p.packageVar=10; p.packageMethod(); 类中的默认成员类中的默认成员 合法:合法:因为因为ChildChild与与ParentParent在同一个包中,在
35、同一个包中,因此有权通过因此有权通过ParentParent的对象访问它的默认的对象访问它的默认成员成员 2019-5-1154谢谢观赏3. protected修饰符修饰符允许允许类本身类本身、它的、它的子类子类、以及、以及同一个包中其余的类同一个包中其余的类访问这些访问这些成员。成员。2019-5-1155谢谢观赏package p1; class Parent protected int protectedVar; protected void protectedMethod( ) System.out.println(“I am protectedMethod); 2019-5-1156
36、谢谢观赏package p1; class Person void accessMethod() Person p = new Person(); p.protectedVar = 100; p.protectedMethod(); 由于由于Person类与类与Parent在同一个包中在同一个包中 所以,可以创建它的对象,并实现访问。所以,可以创建它的对象,并实现访问。2019-5-1157谢谢观赏package p2; import p1.*; class Child extends Parent void accessMethod(Parent p, Child c) p.iamprote
37、cted = 10; c.iamprotected = 10; / 子类 p.protectedMethod(); c.protectedMethod(); / 子类 X X 由于由于Child与父类与父类Parent不在同一个包中,不在同一个包中,只能通过只能通过子类子类Child的对象的对象来实现访问来实现访问 X X 2019-5-1158谢谢观赏4. public修饰符修饰符带有带有public的成员可以被所有的成员可以被所有的类访问。的类访问。 一个成员只有在被外部对象使一个成员只有在被外部对象使用后不会产生不良后果时,才用后不会产生不良后果时,才被声明为被声明为public。 20
38、19-5-1159谢谢观赏3.2.3 package和和import程序员可以将一组相关的类与接口包程序员可以将一组相关的类与接口包裹在一起形成一个包裹在一起形成一个包(package)。 易于确定包中的类是相关的,根据功能易于确定包中的类是相关的,根据功能可找到相应的类。可找到相应的类。 防止类命名混乱。防止类命名混乱。 控制包中的类、接口、成员变量和方法控制包中的类、接口、成员变量和方法的可见性。的可见性。 2019-5-1160谢谢观赏1. package语句语句指定程序中的指定程序中的类类属于一个属于一个哪个包哪个包: package pkg1.pkg2.pkg3; 包定义语句在每个源
39、程序中只能有一包定义语句在每个源程序中只能有一条,即一个类只能属于一个包条,即一个类只能属于一个包; 包定义语句必须在程序的第一行包定义语句必须在程序的第一行(之之前可有空格及注释前可有空格及注释); 包名用包名用“.” 分隔。分隔。2019-5-1161谢谢观赏【例例3-13】利用利用package关键词,将类关键词,将类Circle打包到打包到 com下的下的graphics包中。包中。1.package com.graphics;2.public class Circle 3. final float PI=3.14159f; / 定义一个常量定义一个常量PI4. public stat
40、ic void main(String args) 5. System.out.println(画一个圆形!画一个圆形!); 6. 7.包的创建包的创建2019-5-1162谢谢观赏comgraphicspackage com.graphics;该该Java程序所定义的类程序所定义的类保存的路径为:保存的路径为:C: mypkgcomgraphicsclasspath=.;c:mypkg 包分隔符相当于包分隔符相当于目录分隔符目录分隔符,包存储的路径由包根,包存储的路径由包根路径加上包名指明的路径加上包名指明的路径路径组成;组成; 包的根路径由包的根路径由CLASSPATH环境变量指出。环境变
41、量指出。2019-5-1163谢谢观赏编译和生成包编译和生成包编译之后拷贝编译之后拷贝 javac Circle.javaCircle.class 将将Circle.class复制复制graphics子目录下子目录下简化的编译命令简化的编译命令 javac -d C:mypkg Circle.java1、生成C:mypkgcomgraphics;2、将Circle.class保存到该子目录下。2019-5-1164谢谢观赏2019-5-1165谢谢观赏2. import语句语句功能:功能: import语句告诉编译器要使用语句告诉编译器要使用的的Java类所在的位置;类所在的位置; 注意注意,
42、包名也是类名的一部分。包名也是类名的一部分。2019-5-1166谢谢观赏将将package 引入源程序,格式:引入源程序,格式: import 包名包名.*; import 包名包名. 类名;类名;import 语句必须在源程序之前,在语句必须在源程序之前,在package 声明之后,声明之后,Java程序的结构:程序的结构: package . / package .; import . / import java.lang.*; 类声明类声明2019-5-1167谢谢观赏3.3 类的继承与多态类的继承与多态1. 类的继承类的继承2. 方法的重写方法的重写3. 运行时多态运行时多态4. 对
43、象类型的强制转换对象类型的强制转换5. Object类类2019-5-1168谢谢观赏3.3.1 类的继承类的继承2019-5-1169谢谢观赏1.1. 继承其他类的类叫继承其他类的类叫子类子类,被继承的,被继承的类叫做类叫做超类超类(父类)。(父类)。 继承的特点继承的特点 层次结构层次结构 子类继承子类继承 父类的属性和方法父类的属性和方法 2019-5-1170谢谢观赏例例3-15:2019-5-1171谢谢观赏class Animal boolean live = true; public void eat() System.out.println( 动物需要吃食物动物需要吃食物 );
44、 public void move() System.out.println(“动物会运动动物会运动 ); 实现步骤:实现步骤:步骤:编写父类步骤:编写父类步骤:编写子类,使用关键字步骤:编写子类,使用关键字extendsextends继继承父类承父类class Bird extends Animal String skin= “羽毛羽毛 public void move() System.out.println(“鸟会飞翔鸟会飞翔 ); 父类名称父类名称 子类名称子类名称2019-5-1172谢谢观赏public classpublic class Zoo Zoo public static
45、 voidpublic static void main( main(StringString args) args) Bird bird= Bird bird=new new Bird();Bird(); bird.eat(); bird.eat(); bird.move(); bird.move(); System.out.println( System.out.println(鸟有:鸟有:+bird.skin);+bird.skin); 访问父类的成员方法访问父类的成员方法 访问子类的成员方法访问子类的成员方法 【执行结果执行结果】动物需要吃食物动物需要吃食物鸟会飞翔鸟会飞翔鸟有:羽毛鸟
46、有:羽毛2019-5-1173谢谢观赏2. 单继承单继承Java是是单继承单继承的,即只能从一个类的,即只能从一个类继承,继承,extends后类名只能有一个。后类名只能有一个。单继承的单继承的优点优点: 代码更可靠;代码更可靠; 可以用接口弥补,用一个类实现多个接可以用接口弥补,用一个类实现多个接口,达到多继承效果。口,达到多继承效果。2019-5-1174谢谢观赏3. super关键字关键字 super可用于访问父类中定义的属性可用于访问父类中定义的属性和成员方法;和成员方法; super可用于在子类构造方法中调用可用于在子类构造方法中调用父类的构造方法;父类的构造方法; super的追溯
47、不仅限于直接父类。的追溯不仅限于直接父类。2019-5-1175谢谢观赏【例例3-16】使用使用super调用父类构造方法调用父类构造方法1.class Animal 2. boolean live=true;3. String skin= ;4. public Animal(boolean l,String s) 5. live=l;6. skin=s;7. 8.2019-5-1176谢谢观赏9.class Bird extends Animal 10. public Bird(boolean l,String s) 11. super(l,s); 12. 13. 14. public cl
48、ass Zoo 15. public static void main(String args) 16. Bird bird=new Bird(true,羽毛);17.System.out.println(鸟有:+bird.skin);18. 19. 通过super调用父类的构造方法2019-5-1177谢谢观赏注意:子类子类构造方法体的构造方法体的第一句第一句通常要调用通常要调用父父类类的一个构造方法。的一个构造方法。此时,如果不使用此时,如果不使用super指定,则将调用指定,则将调用默认的父类构造方法默认的父类构造方法(即不带参数的构造即不带参数的构造方法方法)。如果在父类中没有无参构造
49、方法,则将如果在父类中没有无参构造方法,则将产生产生编译错误编译错误。2019-5-1178谢谢观赏子类中父类成员的隐藏子类中父类成员的隐藏子类子类隐藏隐藏父类的成员父类的成员 当子类的当子类的成员变量成员变量与父类的与父类的成员变量成员变量同名时;同名时; 当子类的成员方法与父类的成员方法当子类的成员方法与父类的成员方法具有相同的具有相同的名字名字、参数列表参数列表、返回值返回值类型类型;2019-5-1179谢谢观赏“隐藏隐藏”的含义的含义通过通过子类对象子类对象调用子类中与父类同名的变调用子类中与父类同名的变量和方法时,量和方法时,有效的有效的(操作操作)是是子类子类中定义中定义的变量和
50、方法。的变量和方法。如果要在子类中访问父类中被隐藏的成员如果要在子类中访问父类中被隐藏的成员变量或方法,要使用关键词变量或方法,要使用关键词super。 2019-5-1180谢谢观赏3.3.2 方法的重写方法的重写在子类中对从父类继承的方法进行改造,在子类中对从父类继承的方法进行改造,称为称为方法的重写方法的重写。 子类中重写方法必须和父类中被重写方法具子类中重写方法必须和父类中被重写方法具有相同的有相同的方法名方法名、参数列表参数列表和和返回值类型返回值类型 子类中重写方法的子类中重写方法的访问权限访问权限不能缩小不能缩小 子类中重写得方法子类中重写得方法不能抛出新的异常不能抛出新的异常
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。