类与对象的基本概念_第1页
类与对象的基本概念_第2页
类与对象的基本概念_第3页
类与对象的基本概念_第4页
类与对象的基本概念_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

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

文档简介

类与对象的基本概念第1页,共107页,2023年,2月20日,星期二目录2.1编程语言的几个发展阶段2.2类2.3对象2.4static关键字2.5this关键字2.6包2.7访问权限第2页,共107页,2023年,2月20日,星期二2.1编程语言的几个发展阶段1、机器语言如:汇编语言面向机器的语言,低级语言,是计算机处理信息的早期语言特点:程序中的指令都是由0,1组成的序列,称为“机器指令”优点:深入理解CPU、寄存器等硬件系统原理单片机等硬件系统编程第3页,共107页,2023年,2月20日,星期二2、过程语言如:C语言、Fortran语言面向过程的语言,高级语言,接近人的“自然语言”特点:程序通常由若干“块”(过程/函数)组成,每个块负责完成独立的功能第4页,共107页,2023年,2月20日,星期二采用面向过程的编程思想:程序=算法+数据优点:流程清晰执行效率比面向对象程序高适于编写数据处理类程序及较小程序,如:算法。缺点:处理复杂问题时,逻辑混乱可维护性较差第5页,共107页,2023年,2月20日,星期二3、面向对象语言如:Java语言、C++语言高级语言,更加符合人的思维模式特点:封装继承多态第6页,共107页,2023年,2月20日,星期二采用面向对象的编程思想:“一切都是对象”程序=对象+消息优点:高可维护性、可扩展性、可复用性、健壮性适于编写复杂的、较大的程序缺点:执行效率较低第7页,共107页,2023年,2月20日,星期二封装将数据和对数据的操作封装在一个对象中,并且对对象的使用者隐藏数据的实现过程例如:卡车、公共汽车、轿车等可以抽象出其共性:属性:可乘人数、运行速度、功率、油耗、自重、轮子数目行为(功能):加速、减速、刹车、转弯面向对象编程三个特性第8页,共107页,2023年,2月20日,星期二将这些特性封装在一起,用类描述classcar

{ intnumber; doublespeed; intpower; doubleoilwear; doubleweight; intwheel; publicvoidspeedup(doublespeed){……} publicvoidspeeddown(doublespeed){……} publicvoidbrake(){……} ……}第9页,共107页,2023年,2月20日,星期二继承通过抽象,抽取出某一类的多个对象的共同特性,形成“类”子类可以继承父类的属性及功能,并能够扩展例如:自行车、校车都属于“车”这一类型,并且具有共同的属性“时速”,可抽象出“车”作为父类第10页,共107页,2023年,2月20日,星期二class车

double时速class校车

class自行车

class轿车

//自动继承了“时速”属性校车(){

时速=90;}//还能扩展属性和功能boolean有空调;void放音乐(){}第11页,共107页,2023年,2月20日,星期二多态方法的多态:多个操作(方法)可具有相同的名字,但方法接收的参数必须不同;继承的多态:同一个操作被不同类型对象调用时,可产生不同的行为。对象的上转型对象第12页,共107页,2023年,2月20日,星期二示例:方法的多态class校车

校车(){

时速=90;}校车(天气wea){if(wea==天气.雨天)时速=70;elseif(wea==天气.雪天)

时速=120;}校车(司机who,天气wea){if(who==司机.张师傅&&wea==天气.雨天)

时速=120;elseif……}第13页,共107页,2023年,2月20日,星期二示例:继承的多态class车

doublecost(){return0;}class校车

doublecost(){return65;}class自行车

doublecost(){return650;}车car=new车();doublecost=car.cost();//cost的值为0车car=new校车();doublecost=car.cost();//cost的值为65车car=new自行车();doublecost=car.cost();//cost的值为650第14页,共107页,2023年,2月20日,星期二2.2类什么是类?类是组成Java程序的基本要素;类封装了一类对象的属性和方法;类是用来定义对象的模板。类的实现包括两部分:类声明类体第15页,共107页,2023年,2月20日,星期二1、类的声明classPeople{…}类的声明People为类名第16页,共107页,2023年,2月20日,星期二2、类体classPeople{…}类体:大括号及其包含内容类体的内容:大括号之间内容第17页,共107页,2023年,2月20日,星期二声明形式

[public][abstract|final]class类名称 [extends父类名称][implements接口名称列表]

{

成员变量声明及初始化; 成员方法声明及方法体;

}思考:类声明的作用,需要定义哪些内容,需要明确哪些限制,有无现有代码可以复用?第18页,共107页,2023年,2月20日,星期二类体的内容由两部分构成:变量定义:用来刻画属性;方法定义:用来刻画功能。例如:class

梯形

{

float

上底,下底,高,area;//变量定义部分

float

计算面积(){//方法定义部分

area=(上底+下底)*高/2.0f;

returnarea;}

void

修改高(floath){//方法定义部分高=h;}}第19页,共107页,2023年,2月20日,星期二钟表类思考:该类封装了时分秒状态属性和设置时间、显示时间的功能方法publicclassClock{//成员变量

inthour;intminute;intsecond;//成员方法

publicvoidsetTime(intnewH,intnewM,intnewS){ hour=newH;minute=newM;second=news;}publicvoidshowTime(){ System.out.println(hour+":"+minute+":"+second);}}第20页,共107页,2023年,2月20日,星期二3、成员变量和局部变量成员变量:变量定义部分定义的变量;局部变量:方法体中定义的变量和方法的参数。例:找出下面类中的成员变量和局部变量class梯形{float上底,下底,高,area;float计算面积(){floatarea=(上底+下底)*高/2.0f;returnarea;}void修改高(floath){

高=h;}}第21页,共107页,2023年,2月20日,星期二成员变量和局部变量的类型可以是Java

中的任一类型,包括基本类型和引用类型。成员变量在整个类内都有效;局部变量只在定义它的方法内有效。成员变量与其在类体中的书写位置无关,但不提倡将成员变量定义分散开第22页,共107页,2023年,2月20日,星期二成员变量分为两种类型:实例成员变量:简称“实例变量”,无“static”修饰类变量:或称“静态变量”,有“static”修饰举例:classPuppy{ String名字;

staticString叫声="汪汪~~";}实例变量类变量第23页,共107页,2023年,2月20日,星期二如果局部变量与成员变量名称相同,则:

成员变量被隐藏(即在该方法中,成员变量功能失效)举例:classPuppy{ String名字="旺财"; void关门放狗(){ String名字="泰格"; System.out.println(名字+",咬他!"); }}Puppyd=newPuppy();d.关门放狗();运行结果:

泰格,咬他!第24页,共107页,2023年,2月20日,星期二如果方法参数与成员变量名称相同,则:

成员变量被隐藏举例:classPuppy{ String名字="旺财"; void关门放狗(String名字){ System.out.println(名字+",咬他!"); }}Puppyd=newPuppy();d.关门放狗("泰格");运行结果:

泰格,咬他!第25页,共107页,2023年,2月20日,星期二当方法的局部变量、方法参数与成员

变量的名称相同时,如果想调用成员变量,必须使用“this”关键字this代表调用该方法的当前对象举例:第26页,共107页,2023年,2月20日,星期二classPuppy{ String名字="旺财"; void关门放狗(){ String名字="泰格"; System.out.println(名字+",咬他!"); } void关门放狗(String名字){ System.out.println(名字+",咬他!");}}Puppyd=newPuppy();d.关门放狗();d.关门放狗("泰格");运行结果:

泰格,咬他! 泰格,咬他!this.名字this.名字运行结果:

旺财,咬他! 旺财,咬他!第27页,共107页,2023年,2月20日,星期二声明格式—格式有很多,这里是成员变量的格式,思考有哪些?

[public

|

protected

|

private]

[static][

final]

变量数据类型变量名1[=变量初值], 变量名2[=变量初值],…;格式说明public、protected、private

为访问控制符static指明这是一个静态成员变量final指明变量的值不能被修改成员变量声明小结:第28页,共107页,2023年,2月20日,星期二4、方法方法的定义包括两部分:方法声明和方法体。void关门放狗(String名字){ System.out.println(名字+",咬他!");}方法体方法声明第29页,共107页,2023年,2月20日,星期二方法定义格式

[public|protected|private] [static][final][abstract]

返回类型方法名([参数列表])[throwsexceptionList]

{

方法体

}第30页,共107页,2023年,2月20日,星期二①方法声明通常包含:修饰符、方法类型、方法名、参数

publicstatic

void

main(String[]args)方法类型可以是任意的Java类型,void代表该方法无返回值参数的类型也可以是任意的Java类型②方法体通常包含:局部变量定义、Java语句第31页,共107页,2023年,2月20日,星期二③方法的参数、方法内定义的局部变量

有效范围问题:方法参数在整个方法内有效,方法内定义的局部变量从它定义的位置之后开始有效;如果局部变量的定义是在一个复合语句中,那么该局部变量的有效范围是该复合语句;如果局部变量的定义是在一个循环语句中,那么该局部变量的有效范围是该循环语句。第32页,共107页,2023年,2月20日,星期二void看门(Peoplep){

String日志;

if(p.身份=="小偷"){

Strings="小偷来啦!";

报警(); 咬他();

日志+=s; } if(p.身份=="主人"){

日志+="主人来啦!"; for(inti=1;i<=100;i++){

摇尾巴(); } } System.out.println(日志); System.out.println(s); System.out.println(p.身份); System.out.println(i);}有效无效有效无效第33页,共107页,2023年,2月20日,星期二5、方法重载方法的多态性一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即:或者是参数的个数不同,或者是参数的类型不同。第34页,共107页,2023年,2月20日,星期二classArea{

floatgetArea(floatr){ return3.14f*r*r; }

doublegetArea(floatx,inty) { returnx*y;}

floatgetArea(inty,floatx){ returnx*y;}

doublegetArea(floatx,floaty,floatz){ return(x*x+y*y+z*z)*2.0;}}参数个数不同参数类型不同第35页,共107页,2023年,2月20日,星期二注意:方法的返回类型和参数的名字不参与比较,即:即使两个方法类型不同,也必须保证参数不同。例如:

doublegetArea(floatx,inty){

returnx*y;

}

floatgetArea(floaty,intx){

returnx*y;

}非法!因为两个方法参数相同。第36页,共107页,2023年,2月20日,星期二6、构造方法一种特殊方法,它的名字必须与它所在的类的名字完全相同,而且没有类型,构造方法也可以重载。没有类型并不是指返回类型是void,其实返回的类型是类本身第37页,共107页,2023年,2月20日,星期二class梯形{ float上底,下底,高;

梯形(){

上底=60;

下底=100;

高=20; }

梯形(floatx,inty,floath){

上底=x;

下底=y;

高=h; }}名字与类名相同没有类型重载了两个构造方法梯形t=new梯形(0.1,100,100);使用构造方法创建了一个对象第38页,共107页,2023年,2月20日,星期二构造方法用于创建一个对象。构造方法很“特殊”,不能被其他方法调用;只能在初始化一个对象的时候使用从内存分配上讲,一个对象通过构造方法初始化结束过后,才得到该对象的内存模型第39页,共107页,2023年,2月20日,星期二在Java中,类至少需要一个构造方法;

如果类中没有构造方法,那么在使用该类创建对象时,JVM会为该类自动提供一个无参数的构造方法,称为默认构造方法。如:

classPuppy{

String名字;

staticString叫声="汪汪~~";

}Puppyd=newPuppy();调用了默认构造方法,无参数;实际上,默认构造方法无任何代码第40页,共107页,2023年,2月20日,星期二注意:如果类定义了一个或者多个构造方法,那么Java不提供默认的构造方法。例如:

class梯形{

float上底,下底,高;

梯形(floatx,inty,floath){

上底=x; 下底=y; 高=h;

}

}梯形t=new梯形(0.1,100,100);梯形t2=new梯形();合法非法第41页,共107页,2023年,2月20日,星期二构造方法中通常写一些初始化成员变量的

赋值语句,当然也可以写其他代码。例如:

classPuppy{

String名字="旺财";

Puppy() {

System.out.println("旺财来也!");

}

}Puppyd=newPuppy();运行结果:

旺财来也!第42页,共107页,2023年,2月20日,星期二7、类方法和实例方法类中的方法也可分为实例方法和类方法:不加关键字static的是实例方法;加关键字static的是类方法构造方法是特殊的方法,不能用static修饰构造方法第43页,共107页,2023年,2月20日,星期二8、值得注意的问题对成员变量的操作只能放在方法中,在定义类的成员变量时可以同时赋初值,如:

classA{

inta=12;

}

classA{

inta;

a=12;

}合法非法因为:

类体的内容由成员变量定义、

方法定义两部分组成。第44页,共107页,2023年,2月20日,星期二实例方法既能对类变量操作,也能对实例

变量操作;而类方法只能对类变量进行操作。例如:

classA{

inta=12;

staticintb;

voidf(){

a=120;

b=210;

}

staticvoidg(){

a=1;

b=2;

}

}合法非法合法合法第45页,共107页,2023年,2月20日,星期二实例方法可以调用该类中的其他方法;而类方法

只能调用该类的类方法,不能调用实例方法。例如:

classA{

staticinta;

staticvoidg(){

a=3;

}

voidf(){

g();

}

staticvoidh(){

g();

f();

}

}合法非法合法第46页,共107页,2023年,2月20日,星期二2.3对象类是创建对象的模板。当使用一个类创建了一个对象时,我们也说该对象是这个类的一个实例。在程序中,同一个类可以创建多个对象。第47页,共107页,2023年,2月20日,星期二1、创建对象包括对象声明和为对象分配内存两个步骤。(1)对象声明一般格式为: 类名

对象名;如: People

zhangPing;第48页,共107页,2023年,2月20日,星期二(2)为对象分配内存使用new运算符和类的构造方法为声明的对象分配内存new运算符的功能可以理解为:“给我一个新对象”如果类中没有构造方法,系统会调用默认的构造方法第49页,共107页,2023年,2月20日,星期二(3)对象的内存模型例子:西游记人物class西游记人物{

float身高,体重; String发型,耳朵,手,脚,嘴巴;

void喊话(Strings){ System.out.println(s);}}执行代码:

西游记人物猪八戒;//声明对象

猪八戒=new西游记人物();//分配内存,使用了new运算符和默认构造方法第50页,共107页,2023年,2月20日,星期二①首先,声明了一个对象“猪八戒”。西游记人物猪八戒;此时的内存模型如图所示:NULL猪八戒未分配实体的对象

“空对象”第51页,共107页,2023年,2月20日,星期二②然后,实例化对象“猪八戒”。猪八戒=new西游记人物();此时,JVM会做两件事:为“西游记人物”类的“发型”等成员变量分配内存;接着执行构造方法。如果成员变量没有被初始化,则系统提供默认值。new运算符在为成员变量分配内存后,将返回一个引用给变量“猪八戒”,即:记录对象的起始地址。第52页,共107页,2023年,2月20日,星期二“猪八戒”实例化后的内存模型如图所示:存储成员的空间是连续的,因此,对象“猪八戒”内保存的其实是第一个成员变量的首地址猪八戒0.00.0nullnullnullnullnull体重耳朵手脚嘴巴身高发型0xAB3第53页,共107页,2023年,2月20日,星期二③创建多个不同对象一个类可以通过使用new运算符创建多个不同对象,这些对象将分配不同的内存空间,因此,改变一个对象的成员变量不会影响其他对象的状态。例如:创建两个“西游记人物”类型的对象:

西游记人物猪八戒=new西游记人物();

西游记人物孙悟空=new西游记人物();第54页,共107页,2023年,2月20日,星期二两个对象实例化后的内存模型如图所示:猪八戒0.00.0nullnullnullnullnull0xAB3孙悟空0.00.0nullnullnullnullnull0xFA6第55页,共107页,2023年,2月20日,星期二2、使用对象通过使用运算符“.”,对象可以访问自己的成员变量或者调用方法。例如:

class西游记人物{

float身高,体重;String发型,耳朵,手,脚,嘴巴;

void喊话(Strings){ System.out.println(s); }

}第56页,共107页,2023年,2月20日,星期二执行代码:

西游记人物猪八戒=new西游记人物();

猪八戒.发型="光头";

猪八戒.喊话("俺老猪五百年前是帅哥!");}访问成员变量调用方法第57页,共107页,2023年,2月20日,星期二3、对象的引用和实体用类创建一个对象时,类中的成员变量被分配内存空间,这些内存空间称做该对象的实体,而对象中存放着引用(即地址)。一个类创建的多个对象,如果具有相同的引用,那么就具有完全相同的实体。

第58页,共107页,2023年,2月20日,星期二例如:类Point:用x,y坐标表示的点

classPoint{

intx,y;

Point(intx,inty){

this.x=x;

this.y=y;

}

}

第59页,共107页,2023年,2月20日,星期二执行代码:Pointp1=newPoint(1,1);Pointp2=newPoint(100,100);p1=p2;p111yx0xAB3p2100100yx0xFF7问题:这部分内存怎么办?0xFF7第60页,共107页,2023年,2月20日,星期二没有实体的对象称作空对象,空对象不能

使用;如果一个实体不再被任何对象所拥有,则变成了“内存垃圾”;Java有“垃圾回收”机制,周期性的检测某实体是否已经不再被任何对象所拥有,发现则回收内存。第61页,共107页,2023年,2月20日,星期二4、参数传值当方法被调用时,如果方法有参数,参数必须要实例化,即参数变量必须有具体的值。在Java中,方法的所有参数都是“传值”的,也就是说,方法中参数变量的值是调用者指定的值的拷贝。第62页,共107页,2023年,2月20日,星期二参数传值的精度转换问题:对于基本数据类型的参数,向该参数传递

的值的精度不可以高于该参数的精度。例如:不可以向int型参数传递一个float值,但可以向double型参数传递一个float值。第63页,共107页,2023年,2月20日,星期二参数传值对变量的影响:传递基本类型的变量由于基本类型变量中保存的是“值”,因此改变的仅仅是值的副本,传值的变量内容不会改变;传递引用类型的变量由于引用类型变量中保存的是“地址”,因此尽管传递的是“地址”的副本,但是改变的是“地址”所对应的内存实体,因此变量内容发生改变。第64页,共107页,2023年,2月20日,星期二例如:class西游记人物{ double体重;

void设置体重(doublex){

体重=x;

}

}第65页,共107页,2023年,2月20日,星期二class塑身{

void改变体重(西游记人物p,doublex)

{

x=x-20; p.设置体重(x);

}

}第66页,共107页,2023年,2月20日,星期二执行代码:西游记人物八戒=new西游记人物();八戒.设置体重(300.00);西游记人物悟空=new西游记人物();八戒300.00体重0xAB3悟空0.00体重0xFF7第67页,共107页,2023年,2月20日,星期二执行代码:塑身帅=new塑身();帅.改变体重(悟空,八戒.体重);

px改变体重@0xF110八戒300.00体重0xAB3悟空0.00体重0xFF7调用方法时,会创建方法栈来保存方法的变量。x=x-20;p.设置体重(x);280.00300.000xFF7280.00第68页,共107页,2023年,2月20日,星期二2.4Static关键字类变量与类方法:用static修饰的成员变量称为类变量

用static修饰的方法称为类方法

第69页,共107页,2023年,2月20日,星期二1、实例变量和类变量的区别一个类通过new运算符可以创建多个对象,每个对象的实例变量将被分配不同的内存空间;而对于类变量,每个对象的类变量都共享同一内存空间,因此,改变其中一个对象的类变量的值,会影响其它对象的这个类变量。第70页,共107页,2023年,2月20日,星期二从内存分配上来说:实例变量的内存在创建对象时才会分配,不同的对象分配不同地址;类变量的内存在加载类时就创建好了,不管这个类是否创建了对象,类变量地址固定不变。第71页,共107页,2023年,2月20日,星期二例如:class西游记人物{

staticString发型;

double体重=70;

西游记人物(Strings,doublex){

发型=s;体重=x;

}

}第72页,共107页,2023年,2月20日,星期二执行代码:西游记人物悟空=new西游记人物("毛寸",75);西游记人物沙僧=new西游记人物("溜冰场",90);System.out.println(沙僧.发型);System.out.println(沙僧.体重);System.out.println(悟空.发型);System.out.println(悟空.体重);第73页,共107页,2023年,2月20日,星期二2、实例方法和类方法的区别实例方法也是在创建对象时才分配入口地址的,但是,后面所创建的对象共享第一个对象创建时生成的入口地址,也就是说,方法的入口地址被所有对象共享。当所有对象都不存在时,实例方法的入口地址才被回收。第74页,共107页,2023年,2月20日,星期二而对于类方法,入口地址在加载类时就分

配了,无论类是否创建了对象,该入口地址都可以直接使用(用类名直接调用)。当程序退出时,类方法的入口地址才被回收。第75页,共107页,2023年,2月20日,星期二2.5this关键字this表示“当前对象”。this可以出现在实例方法和构造方法中,但不可以出现在类方法中。this关键字出现在类的构造方法中时,代表使用该构造方法所创建的对象。this关键字出现在类的实例方法中时,代表正在调用该方法的当前对象。第76页,共107页,2023年,2月20日,星期二例如:classA{ intx; voidf(){

this.x=100; }

}执行代码:Aa1=newA();Aa2=newA();a1.f();a2.f();第77页,共107页,2023年,2月20日,星期二2.6包包是Java中有效的管理类的一个机制。1、包语句通过关键字package声明包语句。package语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。package语句的一般格式为:

package包名;第78页,共107页,2023年,2月20日,星期二如果源程序中省略了package语句,那么:

源文件中定义命名的类被隐含地认为是“无名包”的一部分,即:源文件中定义命名的类在同一个包中,但该包没有名字包名可以是一个合法的标识符,也可以是若干个标识符加“.”分割而成第79页,共107页,2023年,2月20日,星期二2、import语句使用import语句可以引入包中的类。例如:引入一个包中的所有类:

importjava.awt.*;引入某个类:

importjava.util.Date;第80页,共107页,2023年,2月20日,星期二注意:Java会自动载入java.lang包中的所有类,因此不需要显式的importjava.lang包中包含了系统的核心类,是程序运行必不可少的。如果import引入了整个包中的类,那么会增加编译时间,但是不会影响程序运行性能,因为Java是动态加载类的。第81页,共107页,2023年,2月20日,星期二所谓访问权限是指对象是否可以通过

“.”运算符操作自己的变量,或使用类中的方法。访问限制修饰符有private、protected和public,或者可以无修饰符。2.7访问权限第82页,共107页,2023年,2月20日,星期二问题:访问权限有什么用处?用来限制不同类的对象之间访问成员变量或者调用方法的权限注意:在编写类的时候,类中的实例方法总是可以访问该类的成员变量;类方法总是可以操作该类中的类变量,与访问限制符无关系。第83页,共107页,2023年,2月20日,星期二举例:class教师

{

public

String姓名;

private

double身高;

voidset教师信息(Strings,doubled){

姓名=s;

身高=d; }}对于教师类的某个实例方法可以不受限制的访问成员变量,与修饰符无关第84页,共107页,2023年,2月20日,星期二而对于不同的类,访问存在限制:class教师{

public

String姓名;

private

double身高;

voidset教师信息( Strings, doubled){

姓名=s;

身高=d; }}class学生{

教师小郭子=new教师();

voidset教师信息( Strings, doubled){

小郭子.姓名=s;

小郭子.身高=d;}}若某学生对象想访问教师对象中的成员:第85页,共107页,2023年,2月20日,星期二执行以下代码:学生小张=new学生();小张.set教师信息("马路杀手",170);出错!错误描述:public修饰的姓名可以修改;private修饰的身高不能访问!不同类的对象之间,访问成员变量或方法的权限是由修饰符限制的。第86页,共107页,2023年,2月20日,星期二问题:为什么要设置访问权限?保护数据类封装了本身特有的成员和方法,其中有一部分是不希望被其他无关的对象访问的。尽量将数据“私有化”可以尽可能的保护这些数据,使类的职责“分工明确”。第87页,共107页,2023年,2月20日,星期二class教师{

public

String姓名;

private

double身高;

voidset教师信息( Strings, doubled){

姓名=s;

身高=d; }}允许其他类的对象访问只希望“教师”自己的方法来管理第88页,共107页,2023年,2月20日,星期二1、私有变量和私有方法用private修饰本类中的实例方法可以访问本类的私有变量和方法只有在本类中创建该类的对象时,这个对象才能访问自己的私有变量和方法:在类A中创建了类A的对象a,a能访问自己的私有变量和方法在类B中创建了类A的对象a,则a不能访问自己的私有变量和方法第89页,共107页,2023年,2月20日,星期二class教师{

public

String姓名;

private

double身高;

voidset教师信息( Strings, doubled){

姓名=s;

身高=d; }}第90页,共107页,2023年,2月20日,星期二class教师{

public

String姓名;

private

double身高;

voidset教师信息( Strings, doubled){

教师小郭=new教师();

小郭.姓名=s;

小郭.身高=d; }}class学生{voidset教师信息( Strings, doubled){

教师小郭=new教师();

小郭.姓名=s;

小郭.身高=d;

}}合法非法第91页,共107页,2023年,2月20日,星期二2、共有变量和共有方法用public修饰即使不是在本类中创建该类的对象,该对象也能访问自己的共有变量和共有方法在类B中创建了类A的对象a,则a能访问自己的共有变量和方法第92页,共107页,2023年,2月20日,星期二class教师{

public

String姓名;

public

double身高;

voidset教师信息( Strings, doubled){

教师小郭=new教师();

小郭.姓名=s;

小郭.身高=d; }}class学生{voidset教师信息( Strings, doubled){

教师小郭=new教师();

小郭.姓名=s;

小郭.身高=d;

}}合法合法第93页,共107页,2023年,2月20日,星期二可以说,某个对象的public成员允许

在任何类的对象中访问而不受限制同理,对于一个类的共有类变量,那么在另外一个类中,也能通过类名来操作这个共有类变量。第94页,共107页,2023年,2月20日,星期二3、友好变量和友好方法无修饰符修饰的变量和方法称为友好变量和友好方法,或简称“友元”即使不是在本类中创建该类的对象,如果这两个类在同一个包中,该对象也能访问自己的友好变量和友好方法在类B中创建了类A的对象a,若类A和类B在同一包中,则a能访问自己的友元第95页,共107页,2023年,2月20日,星期二packageguo;class教师{String姓名;double身高;

voidset教师信息( Strings, doubled){

教师小郭=new教师();

小郭.姓名=s;

小郭.身高=d; }}packageguo;class学生{voidset教师信息( Strings, doubled){

教师小郭=new教师();

小郭.姓名=s;

小郭.身高=d;

}}合法合法第96页,共107页,2023年,2月20日,星期二同理,对于一个类的友好类变量,如果

两个类在同一包中,那么在另外一个类中,也能通过类名来操作这个友好类变量。第97页,共107页,2023年,2月20日,星期二4、受保护的成员变量和方法用protected修饰即使不是在本类中创建该类的对象,如果这两个类在同一个包中,该对象也能访问自己的受保护的成员变量和方法在类B中创建了类A的对象a,若类A和类B在同一包中,则a能访问自己的protected成员和方法第98页,共107页,2023年,2月20日,星期二问题:protected访问性与“友元”一致?在类继承的访问

温馨提示

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

评论

0/150

提交评论