第三章面向对象程序设计_第1页
第三章面向对象程序设计_第2页
第三章面向对象程序设计_第3页
第三章面向对象程序设计_第4页
第三章面向对象程序设计_第5页
已阅读5页,还剩90页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章第三章 Java与面向对象技术与面向对象技术1、面向对象的概念、面向对象的概念2、Java中的类、方法和变量中的类、方法和变量3、Java名字空间及访问规则名字空间及访问规则4、Java中的抽象类、接口和程序包中的抽象类、接口和程序包5、对象的构造方法、对象的构造方法6. 6. 初始化块初始化块 所谓面向对象的方法学,就是使我们分析、设计和实现一个系统的方法尽可能地接近我们认识一个系统的方法。包括:1、面向对象的概念、面向对象的概念 面向对象的分析(OOA, Object-Oriented Analysis) 面向对象的设计(OOD, Object-Oriented Design) 面向

2、对象的程序设计(OOPL, Object-Oriented Program)面向对象技术主要围绕以下几个概念: 对象、抽象数据类型、类、类型层次(子类)、继承性、多态性。 对象有两个层次的概念:变量变量方法方法1、面向对象的概念、面向对象的概念对象对象 现实生活中对象指的是客观世界的实体; 程序中对象就是一组变量和相关方法的集合,其中变量表明对象的状态,方法表明对象所具有的行为。现实生活中的对象可以将现实生活中的对象可以将现实生活中的对象经过抽象,映射为程序中经过抽象,映射为程序中的对象。的对象。Class Car int color_number; int door_number; int

3、speed; void brake() void speedUp() void slowDown() 抽象数据类型1、面向对象的概念、面向对象的概念对象对象 对象在程序中是通过对象在程序中是通过一种抽象数据类型来描述一种抽象数据类型来描述的,这种抽象数据类型称的,这种抽象数据类型称为类(为类(Class)。)。q程序中的对象是类的一个实例,是一个软件单元,它由一组结构化的数据和在其上的一组操作构成。1、面向对象的概念、面向对象的概念类类q相似的对象可以归并到同一个类中去,就像传统语言中的变量与类型关系一样。q 类是描述对象的“基本原型”,它定义一类对象所能拥有的数据和能完成的操作。在面向对象的

4、程序设计中,类是程序的基本单元。Car car1;Car car2; Car carN;1、面向对象的概念、面向对象的概念类类n消息软件对象通过相互间传递消息来相互作用和通信,一个消息由三部分组成: 1. 接受消息的对象 2. 接收对象要采取的方法 3. 方法需要的参数对象对象B对象对象 A消息消息1、面向对象的概念、面向对象的概念类类n变量:指对象的所知道的状态。n方法:指对象的功能单元。n一个例子class Hello private String s;public void showString() System.out.println(s);public void changeStri

5、ng(String str) s = str; 变量方法showString()方法changeString()1、面向对象的概念、面向对象的概念 类类调用对象的方法相当于给对象发送消息,收到消息的对象通过调用对象的方法相当于给对象发送消息,收到消息的对象通过改变自身的状态或者向其它对象发送消息来响应消息。改变自身的状态或者向其它对象发送消息来响应消息。n在程序中所操作的对象是类的一个实例。n创建一个对象: Hello obj=new Hello();n调用方法: obj. changeString(“dance”); n为什么要使用类?1、面向对象的概念、面向对象的概念类类n采用简单数据类型

6、表示现实世界中概念的存在很大的局限性。例如:采用int型数据表示一个日期概念,需要使用3个变量:int day, month, year;使用类可以把现实问题中的对象映射为程序中的一个整体类。n如果要表示2个人的生日,就要使用6个变量n并且在使用中必须时刻注意三者的联系和约束关系nint day1, month1, year1;nint day2, month2, year2;类中不但有变量,还有与之相关的操作所定义的方法。将变量和方法封装在一个类中,可以对成员变量进行隐藏对成员变量进行隐藏,外部对类成员的访问都通过方法进行,能够保护类成员不被非法修改保护类成员不被非法修改。class Bir

7、thDate public int day,month,year; public int tomorrow() BirthDate mybirth, yourbirth;1、面向对象的概念、面向对象的概念类类BirthDate lily;lily.day=31;lily.month=5;lily.year=1992;已知当前日期对象,求第2天的日期对象: lily.day =lily.day+1;如果lily.day已经为31,操作结果是非法状态。使用类的另一个方便之处,就是操作上的方便为什么要使用类?可以定义一个成员方法tomorrow(),求第2天的日期对象。外部要获得当前日期的后一天时,

8、只要调用: lily.tomorrow();n封装把对象的所有组成部分组合在一起私有数据私有数据 方法方法 方法方法数据数据对象对象A对象对象B公有数据公有数据封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。1、面向对象的概念、面向对象的概念封装封装子类是作为另一个类的扩充或修正而定义的一个类。bicycle(super class)Mountain bikesRacing bikesTandem bikessub class1、面向对象的概念、面向对象的概念子类子类继承是子类利用父类中定义的方法和变量,就像它们属于子类本身一样。cla

9、ss Car int color_number; int door_number; int speed; public void push_break() public void add_oil() class Trash_Car extends Car double amount; public void fill_trash() 1、面向对象的概念、面向对象的概念继承继承extends Car的作用就是的作用就是 copy 了了父类定义父类定义 的变量和方法的变量和方法n方法的重写重写使得在子类中可以重新定义父类中已有的方法,从而体现出子类自己的行为。class Car int color

10、_number; int door_number; int speed; public void push_break() speed = 0; public void add_oil() class Trash_Car extends Car double capacity; public void fill_trash() public void push_break() speed = speed 10; 1、面向对象的概念、面向对象的概念方法的重写方法的重写重载指得是在同一个类中至少有多个方法名字、类型相同,但是参数不同。类类void show(int int_num)void sho

11、w(double double_num)void show(int int_num, float float_num)1231.23123,1.231、面向对象的概念、面向对象的概念方法的重载(多态性)方法的重载(多态性)n类、方法、变量定义的语法规范n对象的创建和使用n继承、重写、重载、多态等概念n内嵌类(inner class)2、Java中的类、方法和变量中的类、方法和变量2、面向对象的实现、面向对象的实现 Java中的类、方法和变量中的类、方法和变量n类的严格定义及修饰字类的修饰字: public abstract | final 缺省方式为缺省方式为 friendly类的修饰字类的修

12、饰字 class 类名称类名称 extends 父类名称父类名称implements 接口名称列表接口名称列表 变量定义及初始化;变量定义及初始化; 方法定义及方法体;方法定义及方法体;类体,其类体,其中定义了该类中所有中定义了该类中所有的变量和该类所支持的方法,的变量和该类所支持的方法,称为成员变量和成员方法。称为成员变量和成员方法。变量修饰字变量修饰字 变量数据类型变量数据类型 变量名变量名1,变量名变量名2=变量初值变量初值; 变量的定义及修饰字public | protected | private static final transient volatile成员变量的类型可以是Ja

13、va中任意的数据类型,包括简单类型,类,接口,数组。2、Java中的类、方法和变量中的类、方法和变量变量定义的语法规范变量定义的语法规范成员变量的作用范围是定义它的类。方法修饰字方法修饰字 返回类型返回类型 方法名称方法名称(参数参数1,参数参数2,) throws exceptionList (statements;) /方法体:方法的内容方法体:方法的内容方法的定义及修饰字public | protected | private static final | abstract native synchronized 返回类型可以是任意的Java数据类型,当一个方法不需要返回值时,返回类型为

14、void。2、Java中的类、方法和变量中的类、方法和变量方法定义的语法规范方法定义的语法规范 参数的类型可以是简单数据类型,也可以是引用数据类型(数组、类或接口),参数传递方式是值传递。 方法体是对方法的实现。它包括局部变量的声明以及所有合法的Java指令。局部变量的作用域只在该方法内部。 一个简单的类一个简单的类class Car int car_number; void set_number(int car_num) car_number=car_num; void show_number() System.out.println (“My car No. is : ”+car_numb

15、er); class CarDemo public static void main(String args) Car Democar=new Car(); DemoCar.set_number(3838); DemoCar.show_number(); My car No. is : 38382、Java中的类、方法和变量中的类、方法和变量一个简单的类一个简单的类(1)对象的生成 通过new操作符生成一个对象;例如:Car Benz,;Benz = new Car(); Car BWM= new Car(); 2、Java中的类、方法和变量中的类、方法和变量对象对象(2)对象的构造过程 为对

16、象开辟空间,并对对象的成员变量进行缺省的初始化; 对成员变量进行指定的初始化; 调用构造方法。(3)对象的使用 利用对象,通过运算符 可以实现对变量的访问和方法的调用。例如: BirthDate lily=new BirthDate();int day;day = lily.day; /引用lily的成员变量daylily.tomorrow();/调用lily的方法tomorrow()2、Java中的类、方法和变量中的类、方法和变量对象对象 类的继承class Car int car_number; void set_number(int car_num) car_number=car_num

17、; void show_number() System.out.println (“My car No. is :”+car_number); 2、Java中的类、方法和变量中的类、方法和变量继承继承class TrashCar extends Car int capacity; void set_capacity(int trash_car_capacity) capacity=trash_car_capacity; void show_capacity() System.out.println(“My capacity is: ” + capacity); 2、Java中的类、方法和变量中

18、的类、方法和变量继承继承Car是父类,是父类,TrashCar是子类。是子类。TrashCar中继承了中继承了Car中的两个方法,同时又增加了两个新方法。中的两个方法,同时又增加了两个新方法。class CarDemo public static void main(String args) TrashCar demoTrashCar = new TrashCar(); demoTrashCar.set_number(4949); demoTrashCar.show_number(); demoTrashCar.set_capacity(20); demoTrashCar.show_capac

19、ity(); 继承的方法继承的方法新增加的方法新增加的方法2、Java中的类、方法和变量中的类、方法和变量继承继承q 继承性是面向对象程序设计语言的另一基本特征,通过继承可以实现代码的复用。2、Java中的类、方法和变量中的类、方法和变量继承继承如果缺省extends子句,则该类为java.lang.Object的子类。q通过在类的声明中加入extends子句来创建一个类的子类:class SubClass extends SuperClassJava中不支持多重继承。继承而得到的类为子类,被继承的类为父类,父类包括所有直接或间接被继承的类。n何时选择继承?一个很好的经验:“B是一个A吗?”如

20、果是则让B做A的子类.例:研究生是学生吗?那么研究生例:研究生是学生吗?那么研究生就是学生的子类就是学生的子类2、Java中的类、方法和变量中的类、方法和变量继承继承常犯的错误常犯的错误A有一个有一个B吗吗? 例如让汽例如让汽车轮子成为汽车的子类是错误的车轮子成为汽车的子类是错误的例:研究生是例:研究生是people吗?那么研究生吗?那么研究生就是就是people的子类的子类继承后得到继承后得到的类应该是的类应该是同一类同一类 类方法的重写 方法重写即指在子类中重新定义父类中已有的方法。class Car int color_number; int door_number; int speed

21、; public void push_break() speed = 0; public void add_oil() class Trash_Car extends Car double capacity; public void fill_trash() public void push_break() speed = speed 10; 2、Java中的类、方法和变量中的类、方法和变量重写重写 重写方法的调用 对于重写的方法,Java运行时系统根据调用该方法的实例的类型来决定选择哪个方法调用。public class DemoCarpublic static void main( Str

22、ing args )Car aCar = new Trash_Car( );aCar. push_break( );在这里, 类Trash_Car中的push_break( )方法将被调用。2、Java中的类、方法和变量中的类、方法和变量重写重写方法重写时应遵循的原则 (1)重写后的方法不能比被重写的方法有更严格的访问权限。 (2)重写后的方法不能比被重写的方法产生更多的例外。2、Java中的类、方法和变量中的类、方法和变量重写重写例: wash the shirt wash the car wash the dog我们通过判断被我们通过判断被wash的物体知道该用哪种方法来的物体知道该用哪种

23、方法来washq早期语言,比如早期语言,比如C语言,不同的函数不能通用,导致语言,不同的函数不能通用,导致 shirtWash(shirt) carWash(car) dogWash(dog)2、Java中的类、方法和变量中的类、方法和变量重载重载 类方法的重载类方法的重载 方法重载即指多个方法可以享有相同的名字。但是方法重载即指多个方法可以享有相同的名字。但是这些方法的这些方法的参数必须不同参数必须不同,或者是参数个数不同,或,或者是参数个数不同,或者是参数类型不同。者是参数类型不同。2、Java中的类、方法和变量中的类、方法和变量重载重载q 例如,要打印不同类型的数据,int, float

24、, String,不需要定义不同名的方法: printInt(int); printFloat(float); printString(String)。q 利用方法重载,只需要定义一个方法名:println(),接收不同的参数: println(int); println(float); println(String);例:例:class Washvoid wash(Cloth shirt) void wash (Auto car) void wash (Animal dog,int n) 2、Java中的类、方法和变量中的类、方法和变量重载重载动态绑定:动态绑定:例:调用例:调用wash方法

25、,所有名字为方法,所有名字为wash的方法都会被找出的方法都会被找出来。来。 wash (Cloth shirt) wash (Auto car) wash (Animal dog,int n)2、编译器根据调用时的实参值,选择所调用的方法,例:、编译器根据调用时的实参值,选择所调用的方法,例:wash(benz)2、Java中的类、方法和变量中的类、方法和变量动态绑定动态绑定 多态性类方法的重载是一种多态性。除此之外,多态性还可以是指在程序中需要使用父类对象的地方,都可以用子类对象来代替。2、Java中的类、方法和变量中的类、方法和变量多态性多态性例如:public class Employ

26、ee extends Object public class Manager extends Employee 则:Employee e = new Manager(); /合通过 instanceof 可以判断所引用的对象实例的实际类型。可以用方法来实现对成员变量的隐藏:q 设置变量方法:setVariable()q 获取变量方法:getVariable()class Sampleprotected int x;void setX(int var ) x = var;int getX() return x; 2、Java中的类、方法和变量中的类、方法和变量成员变量的隐藏成员变量的隐藏在Jav

27、a语言中,提供了操作符instanceof用来判断对象是否属于某个类的实例。public void method (Employee e) if ( e instanceof Manager ) /do something as a Manager else if ( e instanceof Contractor ) /do something as a Contractor else /do something else 2、Java中的类、方法和变量中的类、方法和变量对象状态的确定对象状态的确定EmployeeManagerContractor2、Java中的类、方法和变量中的类、方法和

28、变量内嵌类(内嵌类(inner class)在一个类的内部声明的类,称为内嵌类。public class S int a=10; ./code for Ss methods public void p() return new T(); class T int c =a+ 10; public boolean h () return (c = 0); 内嵌类只能在包含它的类中使用,同时它可以看作是该包含类的一段特殊代码,可以直接使用该包含类的变量和方法。 内嵌类编译后也会形成一个单独的class,但它附属于其包含类。3、Java名字空间及访问规则名字空间及访问规则 -Java的修饰符的修饰符n

29、每个类都拥有自己的名字空间,即指类及其方法每个类都拥有自己的名字空间,即指类及其方法和变量可以使用的范围即作用域,通过修饰符完和变量可以使用的范围即作用域,通过修饰符完成这种限定。对类而言:成这种限定。对类而言:nabstract类:不能直接产生属于这个类的对象;类:不能直接产生属于这个类的对象;npublic类:不但可以被同一程序包类:不但可以被同一程序包(package)中的中的其它类使用,别的程序包中的类也可以使用;其它类使用,别的程序包中的类也可以使用;nfriendly类类(缺省,缺省,包访问类包访问类):只能被本程序包中的:只能被本程序包中的其它类使用,不能被别的程序包中的类使用。

30、其它类使用,不能被别的程序包中的类使用。nfinal类:不能被其他任何类所继承类:不能被其他任何类所继承(安全的考虑安全的考虑);n当一个类可以被访问时,对类内的当一个类可以被访问时,对类内的成员变量成员变量和和成员方成员方法法而言,其作用域可以通过不同的修饰词施以限定。而言,其作用域可以通过不同的修饰词施以限定。3、Java名字空间及访问规则名字空间及访问规则 private: public: protected: friendly(default,前边没有修饰字的情况,前边没有修饰字的情况):a.privatea.private我是自私的我是自私的 ,别碰我别碰我!私有变量或私有方法只能在

31、私有变量或私有方法只能在定义它的类中使用定义它的类中使用class Sundae class Sundae private private Sundae() Sundae() static Sundae makeASundae() static Sundae makeASundae() return new Sundae(); return new Sundae(); public class IceCream public class IceCream public static void main(String args) public static void main(String ar

32、gs) Sundae x = new Sundae();/ Sundae x = new Sundae();/errorerror Sundae x = Sundae.makeASundae(); Sundae x = Sundae.makeASundae(); a.privatea.privateclass Sundae class Sundae private Sundae() private Sundae() static Sundae makeASundae() static Sundae makeASundae() return new Sundae(); return new Su

33、ndae(); public static void main(String args) public static void main(String args) Sundae x = new Sundae();/okSundae x = new Sundae();/ok Sundae x = Sundae.makeASundae(); Sundae x = Sundae.makeASundae(); a.privatea.private n b.publicb.public公有变量或公有方法在公有变量或公有方法在任何其它类中都可以任何其它类中都可以访问访问我有,你有,我有,你有,全都有全都有

34、!package c05.dessert;package c05.dessert; public class Cookie public class Cookie public public Cookie() Cookie() System.out.println(Cookie constructor); System.out.println(Cookie constructor); voidvoid bite() System.out.println(bite); bite() System.out.println(bite); 同一个包、不同一个包、不同的包中的类同的包中的类import

35、c05.dessert.import c05.dessert.* *; ; public class Dinner public class Dinner public Dinner() public Dinner() System.out.println( System.out.println( Dinner constructor); Dinner constructor); public static void main(String args) public static void main(String args) Cookie x = new Cookie(); Cookie x

36、= new Cookie(); x.bite(); x.bite(); / Cant access / Cant access b.publicb.public 不用修饰符修饰的变量和方法称为友好变量和不用修饰符修饰的变量和方法称为友好变量和友好方法友好方法, ,可以在可以在同一包中的不同类之间同一包中的不同类之间访问访问c.friendlypackage c05.dessert;package c05.dessert; public class Cookie public class Cookie public public Cookie() Cookie() System.out.prin

37、tln(Cookie constructor); System.out.println(Cookie constructor); void void bite() System.out.println(bite); bite() System.out.println(bite); 有事您有事您call我,谁我,谁让咱们是朋友呢让咱们是朋友呢!package c05.dessert;package c05.dessert;public class Dinner public class Dinner public Dinner() public Dinner() System.out.print

38、ln( System.out.println( Dinner constructor); Dinner constructor); public static void main(String args) public static void main(String args) Cookie x = new Cookie(); Cookie x = new Cookie(); x.bite(); / Can access x.bite(); / Can access tected tected 当子类和父类不在同一个包时,子类可以访问

39、父类当子类和父类不在同一个包时,子类可以访问父类中的中的protected成员成员package c05.dessert;package c05.dessert; public class Cookie public class Cookie public public Cookie() Cookie() System.out.println(Cookie constructor); System.out.println(Cookie constructor); void void bite() System.out.println(bite); bite() System.out.print

40、ln(bite); 我真想独立,摸我真想独立,摸 摸摸兜里没有多少钱兜里没有多少钱!如果两个类是继承关系,如果两个类是继承关系,protectedprotected就相就相当于当于public,public,否则相当于否则相当于friendlyfriendlyimport c05.dessert.import c05.dessert.* *; ; public class ChocolateChip extends Cookie public class ChocolateChip extends Cookie public ChocolateChip() public ChocolateCh

41、ip() System.out.println(ChocolateChip constructor); System.out.println(ChocolateChip constructor); public static void main(String args) public static void main(String args) ChocolateChip x = new ChocolateChip(); ChocolateChip x = new ChocolateChip(); x.bite(); / Cant access bite x.bite(); / Cant acc

42、ess bite tectedpackage c05.dessert;package c05.dessert; public class Cookie public class Cookie public Cookie() public Cookie() System.out.println(Cookie constructor); System.out.println(Cookie constructor); Protected Protected void bite() void bite() System.out.println(bite); System

43、.out.println(bite); tectedimport c05.dessert.import c05.dessert.* *; ; public class ChocolateChip extends Cookie public class ChocolateChip extends Cookie public ChocolateChip() public ChocolateChip() System.out.println(ChocolateChip constructor); System.out.println(ChocolateChip con

44、structor); public static void main(String args) public static void main(String args) ChocolateChip x = new ChocolateChip(); ChocolateChip x = new ChocolateChip(); x.bite(); / Can access bite x.bite(); / Can access bite tectedn例:例:class Tomclass Tomn public String name; public String

45、name;n private float wage; private float wage;n int age; int age; n class Jerryclass Jerryn void g()void g()n Tom cat=new Tom(); Tom cat=new Tom();n ==“jittyjitty”;/;/合法合法/ /n cat.wage=4300.00f;/cat.wage=4300.00f;/不合法不合法/ /n cat.age=34;/ cat.age=34;/若若TomTom和和JerryJerry的的n 在同一包中是合法的在

46、同一包中是合法的/ /方法和变量是一样的方法和变量是一样的3、Java名字空间及访问规则名字空间及访问规则 同一个类中同一个类中 同一个包中同一个包中 不同包中的子类不同包中的子类 不同包中的非子类(任意类)不同包中的非子类(任意类)privateprivatedefaultdefaultprotectedprotectedpublicpublicn当子类中的变量名与父类的相同,父类的变量被遮盖当子类中的变量名与父类的相同,父类的变量被遮盖。class A int data_a=3; 3、Java名字空间及访问规则名字空间及访问规则class B extends A int data_a =

47、5;class C extends B void print_out() System.out.println(“data_a= ”+data_a); class demo public static void main(String args) C c = new C(); c.print_out(); data_a=53、Java名字空间及访问规则名字空间及访问规则 final:到此为止:到此为止nfinal在类之前在类之前n表示该类是最终类,不能再被继承。表示该类是最终类,不能再被继承。nfinal在方法之前在方法之前n表示该方法是最终方法,该方法不能被任何表示该方法是最终方法,该方法不

48、能被任何派生的子类重写。派生的子类重写。nfinal在变量之前在变量之前n表示变量的值在初始化之后就不能再改变;表示变量的值在初始化之后就不能再改变;相当于定义了一个常量。相当于定义了一个常量。static 在变量或方法之前,称为类方法(静态方法)在变量或方法之前,称为类方法(静态方法)或类变量(静态变量)。若无或类变量(静态变量)。若无static修饰,则是实修饰,则是实例方法和实例变量。例方法和实例变量。对象共享静态变量的存贮空间对象共享静态变量的存贮空间class Ex char data; static int s_data;class Demo Ex a,b,c,d; 3、Java名

49、字空间及访问规则名字空间及访问规则 static:类变量和类方法:类变量和类方法a=new Ex();b=new Ex();c=new Ex();d=new Ex();a dataa s_data b datac datad data,d,c,b类变量的生存期不依赖于对象,相当于C语言中全局变量的作用。通过类名访问它们。public class StaticVarpublic static int number 5;public class OtherClasspublic void method() int x = StaticVar.number;3、Java名字空间及访问规则名字空间及访

50、问规则 static:类变量和类方法:类变量和类方法类方法类方法则相当于C语言中的全局函数,其他的类也可以直接通过类名来访问类方法。(Java程序的入口方法main()就是一个类方法)public class GeneralFunctionpublic static int addUp(int x,int y)return x+y;public class UseGeneralpublic void method()int a = 9;int b =10;int c = GeneralFunction.addUp(a,b);3、Java名字空间及访问规则名字空间及访问规则 static:类变量

51、和类方法:类变量和类方法注意:注意:1. 同一个类的实例方法可以访问同一个类的实例方法可以访问该类的类变量和类方法;该类的类变量和类方法;3、Java名字空间及访问规则名字空间及访问规则 static:类变量和类方法:类变量和类方法 讨论:鉴于类变量和类方法的这种存贮讨论:鉴于类变量和类方法的这种存贮特性和访问特性,什么样的方法和变量设特性和访问特性,什么样的方法和变量设计成静态更合适呢?计成静态更合适呢?2.而类方法只能访问该类的类变量和类而类方法只能访问该类的类变量和类方法,不能直接访问实例的变量和方法。方法,不能直接访问实例的变量和方法。 不正确的引用class StaticError

52、String mystring=“hello”; public static void main(String args) System.out.println(mystring); 3、Java名字空间及访问规则名字空间及访问规则 static:类变量和类方法:类变量和类方法编译时错误信息: nonstatic variable mystring cannot be referenced from a static context “System.out.println(mystring);”。为什么不正确:静态方法访问了非静态变量为什么不正确:静态方法访问了非静态变量。n解决的办法1. 将

53、变量改成类变量将变量改成类变量class NoStaticError static String mystring=“hello”; public static void main(String args) System.out.println(mystring); 3、Java名字空间及访问规则名字空间及访问规则 static:类变量和类方法:类变量和类方法n解决的办法2. 先创建一个类的实例先创建一个类的实例class NoStaticError String mystring=“hello”; public static void main(String args) NoStaticEr

54、ror noError; noError = new NoStaticError(); System.out.println(noError.mystring); 3、Java名字空间及访问规则名字空间及访问规则 static:类变量和类方法:类变量和类方法4、Java中的抽象类、接口和程序包中的抽象类、接口和程序包抽象类与抽象方法抽象类与抽象方法n抽象类:用abstract关键字来修饰一个类时,该类叫做抽象类;n抽象类必须被继承。n抽象类不能被直接实例化。它只能作为其它类的超类,这一点与最终类(final类)正好相反。n抽象方法:用abstract来修饰一个方法时,该方法叫做抽象方法。n抽象

55、方法必须被重写n抽象方法只有声明,不能有实现。n定义了抽象方法的类必须是抽象类。nabstract returnType abstractMethod ( paramlist ); 两个类Circle和Rectangle,完成相关参数的计算 class Rectangle public float width,height; Rectangle (float w, float h) width = w; /这里不需这里不需this height = h; public float area() return width*height; class Circle public float r;

56、Circle(float r) this.r = r; /this指指这个对象的这个对象的 public float area() return 3.14*r*r; 4、Java中的抽象类、接口和程序包中的抽象类、接口和程序包抽象类与抽象方法抽象类与抽象方法n假设有若干个Circle,以及若干个Rectangle,希望计算它们的总面积,直截了当的做法是将它们分别放到两个数组中,用两个循环,用加法,这种做法是不漂亮的。4、Java中的抽象类、接口和程序包中的抽象类、接口和程序包抽象类与抽象方法抽象类与抽象方法n如果还有其它形状:Triangle,Ellipses等,上述方法更显得“累赘”。n我们

57、希望有一种统一的表示,例如用一个数组shape,接受所有的形状,然后用:for (i=0; ishape.length; i+) area_total += shapei.area();abstract class Shape abstract float area();class Rectangle extends Shape public float width,height; Rectangle (float w, float h) width = w; /这里不需这里不需this height = h; public float area() return width*height;

58、class Circle extends Shape public float r; Circle(float r) this.r = r; /this指指这个对象的这个对象的 public float area() return 3.14*r*r; 4、Java中的抽象类、接口和程序包中的抽象类、接口和程序包抽象类与抽象方法抽象类与抽象方法 接口(接口(interface)就是方法定义和常量值的集合。)就是方法定义和常量值的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有方法的实现。中只包含常量和方法的定义,而

59、没有方法的实现。4、Java中的抽象类、接口和程序包中的抽象类、接口和程序包接口接口接口的定义:接口的定义:public interface interfaceName extends SuperInterfaceList /常量定义和方法定义interface Collectionint MAX_NUM=100;void add (Object obj);void delete (Object obj);Object find (Object obj);int currentCount ( );4、Java中的抽象类、接口和程序包中的抽象类、接口和程序包 接口接口例:接口的定义例:接口的定义

60、1. 用implements子句来表示一个类使用某个接口。4、Java中的抽象类、接口和程序包中的抽象类、接口和程序包接口的使用接口的使用3. 在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。 2.利用接口可实现多重 继承,即一个类可以使用多个接口,在implements子句中用逗号分隔。 4.接口的作用和抽象类相似,只定义原型,不直接定义方法的内容。5. 接口中的方法和变量必须是public的。interface Collectionint MAX_NUM=100;void add (Object obj);void delete (Object obj);Object

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论