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