《java课件5.ppt》由会员分享,可在线阅读,更多相关《java课件5.ppt(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第四章继承和封装继承和封装回顾回顾v类是具有相同属性和行为的一组对象的类是具有相同属性和行为的一组对象的集合集合,对象是类的实例对象是类的实例v封装是隐藏对象实现细节的过程,以便封装是隐藏对象实现细节的过程,以便不让用户看到实现的细节不让用户看到实现的细节v类可用类可用class来定义,类的变量和方法可来定义,类的变量和方法可被该类的实例访问被该类的实例访问,圆点符号用于访问对圆点符号用于访问对象的成员,构造函数在创建对象时初始象的成员,构造函数在创建对象时初始化对象化对象目标目标v理解理解继承继承及其特点及其特点v运用运用JAVA程序实现继承程序实现继承v理解多态及其特点理解多态及其特点设计
2、设计v运用运用JAVA程序实现多态程序实现多态v掌握掌握访问访问修饰符修饰符和方法修饰符和方法修饰符继承继承父父 类类 子类子类 父类父类/子类是子类是相对的相对的Cow类Lion类Tiger类类Animals类Carnivorous类Herbivorous类Coat类继承的特点继承的特点继承的特点继承的特点具有层次结构子类继承了父类的属性和方法继承的优点继承的优点继承的优点继承的优点代码的可重用性父类的属性和方法可用于子类设计应用程序变得更加简单可以轻松地自定义子类继承的继承的JAVA实现实现 演示:示例演示:示例 1v编写一个父类编写一个父类v使用使用 extends 关键字,编写子类关键
3、字,编写子类class Car extends Vehicles /*构造方法.*/Car()/*显示子类 Car 的信息.*/void show()System.out.println(“从子类 Car 中输出的信息);System.out.println(“交通工具的名称-+name);System.out.println(“交通工具的颜色-+color);System.out.println(“座位的数量-+seats);System.out.println(=);class Vehicles /*存储交通工具的名称.*/protected String name=Honda Civic
4、;/*存储颜色信息.*/protected String color=Red;/*存储座位信息.*/protected int seats=5;/*构造方法.*/Vehicles()/*显示父类汽车的详细信息 */void showDetail()System.out.println(从父类 Vehicles 中输出的信息);System.out.println(名称-+name);System.out.println(颜色-+color);public class CarTest/*构造方法*/CarTest()/*这是 main 方法 *param args 传递至 main 方法的参数
5、*/public static void main(String args)/*声明一个对象*/Car vehicle=new Car();vehicle.show();vehicle.showDetail();子类构造方法子类构造方法 2-1子类构造方法的名称与类的名称相同先调用父类构造方法,再调用子类构造方法要调用父类构造方法,使用关键字 super子类构造方法子类构造方法 2-2v调用父类构造方法的语法为:调用父类构造方法的语法为:super()或或 super(参数列表参数列表);vsuper()方法始终指向调用类的父类方法始终指向调用类的父类调用父类构造方法调用父类构造方法演示:示例
6、演示:示例 3v关键字关键字 super 的用法的用法class FictionAuthor extends Author /*存储作者的小说类型.*/String storytype;/*子类构造方法.param name 传递至构造方法的参数 param type 传递至构造方法的参数*/FictionAuthor(String name,String type)super(name);storytype=type;System.out.println(“从 Fiction Author 类输出);System.out.println(“小说类型为+storytype);调用父类构造方法A
7、uthor(String str)name=str;System.out.println(“从 Author 类输出);System.out.println(“姓名为 +name);多态性多态性 2-1v多态性是指多态性是指“多种形式多种形式”v它使用不同的实例而执行不同操作它使用不同的实例而执行不同操作v多态包括方法重写和方法重载多态包括方法重写和方法重载多态性多态性 2-2父类子类-绘制和移动三角形子类-绘制和移动矩形 子类-绘制和移动五边形ShapeShapeDraw()Move()TriangleDraw()DrawTraingleMove()MoveTriangleVerticesR
8、ectangleDraw()DrawRectangleMove()MoveRectangleCornerPentagonDraw()DrawPentagonMove()MovePentagonVertices方法重载方法重载 2-1方法重载方法重载类中有多个具有相同名称的方法方法重载方法重载方法重载方法重载类中有多个具有相同名称的方法方法具有不同的参数列表方法重载方法重载 2-2演示:示例演示:示例 4public class DisplayNumber /*无参数可显示/void display()System.out.println(无参数可显示!);/*param num 传递至 dis
9、play 方法的参数 *param num1 传递至 display 方法的参数 */void display(int num,int num1)System.out.println(两个整数是:+num+num1);/*param型的 count 由 display 方法接收*/void display(double count)System.out.println(在 display(double)方法内:+count)public static void main(String arg)int count=25;DisplayNumber dispObj=new DisplayNumbe
10、r();dispObj.display();dispObj.display(10,20);/*不存在具有一个 int 型参数的方法,*int 型值自动转化为 double 型值 */System.out.println(“调用 display(double)方法,+“使用 int 变量:+count);dispObj.display(count);dispObj.display(25.5);方法重写方法重写 2-1方法重写方法重写方法重写方法重写子类和父类的方法具有相同的名称和类型用子类对象调用子类中的重写方法super.methodname()用于调用父类中的方法方法重写方法重写 2-2v父
11、类和子类中具有相同名称和类型的方法父类和子类中具有相同名称和类型的方法 public static void main(String arg)Rectangle rectObj=new Rectangle(10,15);rectObj.getPerimeter();Rectangle sqObj=new Square(15);sqObj.getPerimeter();调用父类方法调用子类方法class Square extends Rectangle Square(int len)length=len;/*计算周长.*/void getPerimeter()System.out.println
12、(“正方形的周长为+(4*length);class Rectangle int length;int width;Rectangle(int len,int wid)length=len;width=wid;/*计算矩形的周长.*/void getPerimeter()System.out.println(“矩形的周长为 +(2*(length+width);访问修饰符访问修饰符 3-1v信息隐藏是信息隐藏是 OOP 最重要的功能之一,也是使最重要的功能之一,也是使用访问修饰符的原因用访问修饰符的原因v信息隐藏的原因包括:信息隐藏的原因包括:v对任何实现细节所作的更改不会影响使用对任何实现细
13、节所作的更改不会影响使用该类的代码该类的代码v防止用户意外删除数据防止用户意外删除数据v此类易于使用此类易于使用 访问修饰符访问修饰符访问修饰符访问修饰符访问修饰符访问修饰符privateprotectedpublic默认访问修饰符访问修饰符 3-2该类或非该类均该类或非该类均可访问可访问public只有该类可以访只有该类可以访问问private相同数据包中的相同数据包中的类可以访问类可以访问默认默认该类及其子类的该类及其子类的成员可以访问,成员可以访问,同一个包中的类同一个包中的类也可访问也可访问protected访问修饰符访问修饰符 3-3v访问修饰符可访问性访问修饰符可访问性位置位置pr
14、ivate默默认认protectedpublic同一个同一个类类是是是是是是是是同一个包内的同一个包内的类类否否是是是是是是不同包内的子不同包内的子类类否否否否是是是是不同包并且不是子不同包并且不是子类类否否否否否否是是方法修饰符方法修饰符方法修饰符方法修饰符方法修饰符方法修饰符staticfinalabstractstatic 修饰符修饰符 3-1vstatic修饰符修饰的方法叫静态方法修饰符修饰的方法叫静态方法v目的目的v使该方法独立于类的实例,使用类去访问,使该方法独立于类的实例,使用类去访问,而不是类实例,所以也叫类方法而不是类实例,所以也叫类方法static 修饰符修饰符 3-2v调
15、用静态方法的语法为:调用静态方法的语法为:classname.methodname();规规规规 则则则则可以调用其他静态方法必须访问静态数据不能使用 super 或 this 关键字演示:示例演示:示例 6 public static void main(String arg)/*初始化变量*/double inch=66;double feet=InchesToFeet.convert(inches);System.out.println(inch+“英寸为”+feet+“英尺。);v使用类名称调用使用类名称调用 static 方法方法public static double conver
16、t(double in)return(in/inches);static 修饰符修饰符 3-3final 修饰符修饰符 finalfinal不能修改变量不能修改变量子类不能重写方法子类不能重写方法abstract 修饰符修饰符 3-1v由由abstract修饰的方法叫抽象方法;由修饰的方法叫抽象方法;由abstract修饰的类叫抽象类修饰的类叫抽象类v抽象方法必须声明在抽象类中抽象方法必须声明在抽象类中v抽象方法语法:抽象方法语法:abstract type method_name(parameter_list);v声明抽象类语法:声明抽象类语法:abstract class v使用:父类中的
17、某些抽象不包含任何逻辑,并使用:父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方法的需要在子类中重写,子类提供这种抽象方法的实现细节实现细节abstract 修饰符修饰符 3-2v抽象类可以具有指向子类对象的对象引用抽象类可以具有指向子类对象的对象引用 abstractabstract抽象类不能被实例化构造方法 和 static 方法不能是抽象的父类的抽象方法往往在子类中实现 abstract 修饰符修饰符 3-3 演示:示例演示:示例 7v抽象方法不具有任何实现代码抽象方法不具有任何实现代码abstract class Shape.protected double le
18、ngth;protected double width;.abstract double area();class Square extends Shape /*构造方法.*param num 传递至构造方法的参数 *param num1 传递至构造方法的参数 */Square(final double num,final double num1)super(num,num1);/*计算正方形的面积.*return double */double area()System.out.println(“正方形的面积为:);return length*width;接口接口v接口就是某个事物对外提供的
19、一些功接口就是某个事物对外提供的一些功能的申明能的申明 v可以利用接口实现多态,同时接口也可以利用接口实现多态,同时接口也弥补了弥补了Java单一继承的弱点单一继承的弱点v使用使用interface关键字定义接口关键字定义接口v一般使用接口声明方法或常量,接口一般使用接口声明方法或常量,接口中的方法只能是声明,不能是具体的中的方法只能是声明,不能是具体的实现实现创建接口的步骤创建接口的步骤 2-1/定义定义方法的接口方法的接口public interface myinterface public void add(int x,int y);public void volume(int x,in
20、t y,int z);/定义程序使用的常量的接口定义程序使用的常量的接口public interface myconstants public static final double price=1450.00;public static final int counter=5;创建接口的步骤创建接口的步骤 2-2v编译如下:编译如下:javac myinterface.javav用关键字用关键字 implements 实现接口,例如:实现接口,例如:class demo implements myinterfacev如果有一个以上接口被实现,则用逗号如果有一个以上接口被实现,则用逗号隔开接口
21、名称,如下所示:隔开接口名称,如下所示:class demo implements Mycalc,Mycount接口使用示例接口使用示例public interface GForce double g=9.8;void show();public class InterfaceTest public static void main(String args)GForce gForce=new Earth();gForce.show();public class Earth implements GForce public void show()System.out.println(“g=“+g
22、);总结总结 v封装、继承和多态是面向对象的主要特征封装、继承和多态是面向对象的主要特征v继承可提高继承可提高代码的重用性,使用代码的重用性,使用extends关键字关键字来实现。除了构造方法之外,父类的所有方法来实现。除了构造方法之外,父类的所有方法和属性都被子类的对象继承和属性都被子类的对象继承v多态性是不同的实例对象以不同的方式对相同多态性是不同的实例对象以不同的方式对相同的信息作出不同的表现的信息作出不同的表现总结总结 v访问修饰符用于确定访问类成员的方式访问修饰符用于确定访问类成员的方式vJava 常用常用修饰符有修饰符有 static、final、abstractv接口是接口是Java编程一项重要的技术,同过它可以编程一项重要的技术,同过它可以实现多态,同时它也弥补了实现多态,同时它也弥补了Java单一继承的不单一继承的不足足