Java与面向对象技术(09级).ppt

上传人:max****ui 文档编号:11496774 上传时间:2020-04-25 格式:PPT 页数:146 大小:1.67MB
返回 下载 相关 举报
Java与面向对象技术(09级).ppt_第1页
第1页 / 共146页
Java与面向对象技术(09级).ppt_第2页
第2页 / 共146页
Java与面向对象技术(09级).ppt_第3页
第3页 / 共146页
点击查看更多>>
资源描述
Java与面向对象技术,类的定义与对象的创建构造方法的作用及应用面向对象三大特征的实现抽象类与接口的应用包的创建与使用访问控制符的应用,重点及难点,构造方法的作用及应用面向对象三大特征:封装性、继承性和多态性的Java语言实现抽象类与接口的应用异常处理,2.2对象的基本概念,变量,方法,客观世界的实体,程序中对象,对象具有两方面的含义(考虑从哪些方面描述对象),类的基本概念,类是抽象的,对象是具体的,具有相同特征和行为的对象被抽象为类。类是对象的模板,包括一个对象的所有数据和代码。,类的示例,形状类,动物类,汽车类,对象,“对象是存在的具体实体,具有明确定义的状态和行为。”,对象的示例,收银员对象,顾客对象,顾客姓名:朱丽叶年龄:28体重:52千克操作:购买商品,状态,姓名:布兰尼职衔:收银员年龄:35体重:60千克操作:收款打印帐单,行为,消息传递,“消息指一个对象为执行某项特定操作而向另一个对象发送的请求”,类和对象的示例,雇员,收银员,系统管理员,仓库管理员,面向对象技术的实现,对象、类和实体的关系,类是创建对象的模板,对象是类的实例,类的基本概念,classCarintcolor;intname;intspeed;voidbrake()voidspeedUp()voidslowDown(),类定义,类的修饰符:public|friendlyabstractfinal缺省方式为friendly|package,格式:修饰符class类名extends父类名implements接口名表成员变量声明成员方法声明,其中class、extends和implements都是Java的关键字。,声明成员变量,声明成员变量格式为:;,publicclassDate1/类声明intyear,month,day;/成员变量,public|protected|privatestaticfinaltransientvolatile缺省为:friendly|package,publicclassDate1intyear,month,day;voidprint()System.out.println(dateis+year+-+month+-+day);,声明成员方法,类的行为由其方法实现,其他对象可以调用对象的方法来得到该对象的服务。类中需要定义成员方法的声明和实现。,()throws,方法修饰符为:public|protected|privatestaticfinal|abstractnativesynchronized缺省为:friendly|package,方法的返回值return表达式;return;,publicclassDate1intyear,month,day;booleanisleapyear()/判断年份是否为闰年booleanlean;lean=(year%400=0)|(year%100!=0),例:声明日期类,publicclassDate1intyear,month,day;voidsetdate(inty,intm,intd)/设置日期值year=y;month=m;day=d;booleanisleapyear()/判断年份是否为闰年booleanlean;lean=(year%400=0)|(year%100!=0),定义一个名为Rectangle表示长方形的类,它包含double类型的长length和宽width两个数据成员和设置长方形长宽值的方法setDim()、计算长方形面积的方法area()。,类的实现,练习题,定义Student类如下:1.属性包括:学号,出生年份,数学成绩,英语成绩和计算机成绩。2.方法包括:1)设置初值。2)sum方法(计算并输出总成绩)2)age方法(计算年龄),变量的作用范围,Java允许在任何一个程序块中声明变量,该变量的作用范围就是声明该变量的程序块,在作用域之外,不能访问该变量。方法体中声明的局部变量的作用域在该方法内部。不是类的成员变量。,classAbcinta,b,c,x=5;voidf()intx=10;System.out.println(“x=+x);,x为局部变量,作用域在方法f内,若局部变量与类的成员变量同名,则类的成员变量被隐藏。,方法和变量的作用域,在Java语言中,方法与变量的作用域,根据定义的位置不同,作用域也不全相同。当一个方法使用某个变量时,以如下的顺序查找变量:,publicclassDate1intyear,month,day;voidsetdate(inty,intm,intd)/设置日期值year=y;month=m;day=d;booleanisleapyear()/判断年份是否为闰年booleanlean;lean=(year%400=0)|(year%100!=0),例:声明日期类,publicclassDate1intyear,month,day;voidsetdate(inty,intm,intd)year=y;month=m;day=d;booleanisleapyear()return(year%400=0)|(year%100!=0),intyear,month,day;,对象的声明与创建,CardemoCar;,声明对象,实例化对象,声明对象的同时实例化对象,类名对象名;,对象名=new类名(),运算符new为对象分配内存空间,它调用对象的构造方法,返回引用,类名对象名=new类名(),0XA058,demoCar=newCar();,对象的声明与创建,创建对象,inti;,Date1a;,a=newDate1();,默认的初始化,实例化对象时,系统会对成员变量进行默认的初始化。,显式成员初始化,例如:在Date1类的定义中,若有:classDate1intyear=2011;,注意:一旦我们自己定义了构造方法,系统将不再为我们提供默认的不带参数的构造方法。,publicclassDate2intyear,month,day;Date2(inty,intm,intd)year=y;month=m;day=d;Date2(inty,intm)year=y;month=m;Date2(inty)year=y;,publicstaticvoidmain(Stringargs)Date2a=newDate2(2006,3,6);Date2b=newDate2(2006,3);,=1),classDate3_expublicstaticvoidmain(Stringargs)Date3a=newDate3(2006,3,10);System.out.println(a.year);,publicclassDate3privateintyear,month,day;/成员变量,私有的publicDate3(inty,intm,intd)year=y;month=(m=1),classDate3_expublicstaticvoidmain(Stringargs)Date3a=newDate3(2010,3,10);System.out.println(a.year()+isaleapyear,+a.isleapyear();,publicintgetyear()returnyear;,a.getyear(),属于类的变量和方法staticstatic用在变量或方法前,表明它们是属于类的,称为类方法(静态方法)或类变量(静态变量)。若无static修饰,则是实例方法和实例变量。,类变量在各实例间共享,classABCDchardata;staticintshare_data;classDemoABCDa,b,c,d;,实例成员与类成员,实例变量:每次创建对象时,系统都创建实例变量的拷贝。每一个对象都有一个实例变量。类变量:运行时,只为该类的第一个对象分配内存单元,其后创建的所有对象都共享这一类变量。,实例成员与类成员,类变量的应用,classUserstaticintcount=0;voidlogin()count+;System.out.println(你是第+count+位访问者);classCountpublicstaticvoidmain(Stringargs)Useru1=newUser();u1.login();Useru2=newUser();u2.login();,实例方法即可以访问类变量,也可以访问实例变量。实例方法只能通过对象来调用。类方法只能使用其内部定义的局部变量或类变量。即可以通过对象来调用,也可以通过类名来调用。目的:使方法独立于类的实例,使用类去访问。,实例成员与类成员,注意,实例变量允许超前引用类变量实例变量不能超前引用实例变量,静态变量不能超前引用静态变量实例方法中允许超前引用实例变量和类变量类方法中只允许访问类变量,但允许超前引用,classDate4_expublicstaticvoidmain(Stringargs)Date4a=newDate4(2011,3,1);a.print_count();a.print();Date4b=newDate4(2011,5,1);b.print_count();b.print();a.finalize();Date4.print_count();,例:实例成员与类成员,publicclassDate4privateintyear,month,day;staticintcount=0;publicDate4(inty,intm,intd)year=y;month=m;day=d;count+;publicstaticvoidprint_count()System.out.print(count=+count+);publicvoidprint()System.out.println(dateis+year+-+month+-+day);publicvoidfinalize()count-;,count=1dateis2011-3-1count=2dateis2011-5-1count=1,类方法的应用,publicclassIsPrimepublicstaticbooleanprime(intx)for(intk=2;k=Math.sqrt(x);k+)if(x%k=0)returnfalse;returntrue;ClassTestIsPrimepublicstaticvoidmain(Stringargs)for(intm=10;m=100;m+)if(IsPrime.prime(m)System.out.println(m+“是素数。);,类变量静态初始化程序,通过执行一段程序来对类变量进行初始化。格式:static,实例成员与类成员,实例变量与类变量privateintyear,month,day;/实例变量,私有的staticintcount=0;/类变量实例方法与类方法publicstaticvoidprint_count()/类方法,只能访问类变量publicvoidprint()/实例方法,classStaticErrorStringmystring=“hello”;publicstaticvoidmain(Stringargs)System.out.println(mystring);,编译时错误信息:non-staticvariablemystringcannotbereferencedfromastaticcontextSystem.out.println(mystring);”。,为什么不正确:只有实例方法可以访问实例变量。,1.将变量改成类变量classStaticErrorstaticStringmystring=“hello”;publicstaticvoidmain(Stringargs)System.out.println(mystring);,解决的办法,2.先创建一个类的实例classNoStaticErrorStringmystring=“hello”;publicstaticvoidmain(Stringargs)NoStaticErrornoError;noError=newNoStaticError();System.out.println(noError.mystring);,继承(inheritance),父类,子类,类继承是指一个类可以继承其他类的非私有成员,实现代码复用。被继承的类称为父类,继承父类后产生的类称为子类。,继承的优点,Java中继承的特点,注意:在Java语言中,只允许单继承。,Java中的类都是Object的子类。Object类定义了所有对象都必须具有的基本状态和行为,例如,等待条件变量、转化为字符串、通知其他对象条件变量已改变等。Java中的每个类都从Object类继承了变量和方法,因而Java的所有对象都具有Object对象的基本状态和行为。,object类,publicfinalClassgetClass()获取当前对象所属的类信息,返回Class对象。publicStringtoString()返回当前对象本身的有关信息,按字符串对象返回。publicbooleanequals(Objectobj)比较两个对象是否是同一对象,是则返回true。protectedObjectclone()生成当前对象的一个拷贝,并返回这个复制对象。protectedvoidfinalize()throwsThrowable定义回收当前对象时所需完成的资源释放工作。,object类,何时选择继承?一个很好的经验:“B是一个A吗?”如果是,则让B做A的子类。,常犯的错误A有一个B吗?例如让汽车轮子成为汽车的子类是错误的,继承的实现,classSubClassextendsSuperClass,关键字,如缺省extends子句,则该类为java.lang.Object的子类。可以继承访问权限为public、protected、frendly的成员变量和方法;不能继承访问权限为private的成员变量和方法。构造方法不能继承。,例:子类继承超类的成员变量,publicclassPersonStringname,sex;intage;,classStudentextendsPersonStringdept;,classStudentStringname,sex;intage;Stringdept;,例:子类继承超类的成员方法,publicclassPersonprotectedStringname;protectedintage;Person(Stringn1,inta1)name=n1;age=a1;publicvoidprint()System.out.println(name+,+age);classStudentextendsPersonprotectedStringdept;Student(Stringn1,inta1,Stringd1)name=n1;age=a1;dept=d1;publicstaticvoidmain(Stringargs)Personp1=newPerson(李广,21);p1.print();Students1=newStudent(“陈小瑞”,19,计算机系);s1.print();,李广,21陈小瑞,19,子类继承超类的成员变量,如果子类声明一个与超类成员变量同名的成员变量,子类的成员变量就隐藏了超类的成员变量。这里的隐藏是指子类拥有了两个相同名字的变量,一个继承自超类,另一个自己定义。当子类执行继承自超类的操作时,处理的是继承自超类的变量,而当子类执行它自己定义的方法时,所操作的是它自己定义的变量,而把继承自超类的变量“隐藏”起来了。,classAintdata=3;voidaprint()System.out.println(data=+data);classBextendsAintdata=5;voidbprint()System.out.println(data=+data);publicstaticvoidmain(Stringargs)Bb=newB();System.out.println(data=+b.data);b.aprint();b.bprint();,data=5data=3data=5,当子类中的变量名与超类的相同,超类的变量被隐藏。当子类执行继承自超类的方法时,使用继承自超类的变量,当子类执行它自己的方法时,使用自己定义的变量。,方法的覆盖,子类可以继承父类的方法,也可以自己定义与父类的方法名、参数表及返回类型完全一致的方法,来覆盖父类的方法,即子类中的方法隐藏了父类中同名同参数表的方法。在子类中,若要调用父类中被覆盖的方法,可以使用super。,this引用,指代当前对象本身格式为:this访问当前对象的变量和方法。格式为:this.this.调用本类的构造方法。格式为:this(),This引用,构造方法的形式参数与类的成员变量名相同时,需要使用this。在构造方法中调用其他重载的构造方法,用this(参数列表)的形式。,classDate1intyear,month,day;Date1(intyear)this.year=year;,classDate1intyear,month,day;Date1(inty)year=y;Date1(inty,intm)this(y);month=m;Date1(inty,intm,intd)this(y,m);day=d;Date1()classApublicstaticvoidmain(Stringargs)Date1d1=newDate1();Date1d2=newDate1(2006);Date1d3=newDate1(2006,3);Date1d4=newDate1(2006,3,25);System.out.println(date:+d4.year+d4.month+d4.day);,this(),当一个构造方法需要调用另一个构造方法时,应使用this,同时这个调用语句应该是整个构造方法的第一个可执行语句。,classDateprivateintyear,month,day;/构造方法,略voidprintDate()/输出日期,略booleanisLeap()/判断是否为闰年,略privateintdaysInYear()/计算日期在本年为第几天,略,This的使用,classDateintcountDay(Dated1,Dated2)/计算两个日期相距的天数d2.year=d1.year;if(d1.monthd2.month|d1.month=d2.month,调用:today.countDay(today,birthday),This的使用,classDateintcountDay(Dated1,Dated2)d2.year=this.year;if(this.monthd2.month|this.month=d2.month,intcountDay(Dated2),This的使用,调用:today.countDay(today,birthday),调用:today.countDay(birthday),super引用,使用关键字super,可以引用被子类隐藏的超类的成员变量和成员方法,称为super引用。访问被子类隐藏的超类的成员变量和成员方法。super.变量名super.方法名调用超类的构造方法。super(参数列表),publicclassPerson4staticintcount=0;protectedStringname;protectedintage;publicPerson4(Stringn1,inta1)/构造方法this.name=n1;this.age=a1;this.count+;publicintolderthan(Person4b)/比较两个人的年龄returnthis.age-b.age;publicvoidprint()System.out.print(this.getClass().getName()+);System.out.print(count=+this.count+);System.out.println(+this.name+,+this.age);,例:this和super引用,classStudent4extendsPerson4protectedStringdept;Student4(Stringn1,inta1,Stringd1)super(n1,a1);/调用超类的构造方法dept=d1;publicstaticvoidmain(Stringargs)Person4p1=newPerson4(李大广,21);p1.print();Student4s1=newStudent4(陈小瑞,19,计算机系);s1.print();System.out.println(年龄差=+p1.olderthan(s1);,例:this和super引用,super必须是子类构造方法的第一条语句。,当一个消息(method)被发送给一个实例时,系统会在类层次树上进行查找。假设向类D的对象发送了一条消息M().,方法查找,如果方法M()在类D中定义,则执行此方法。否则在D的父类(C)中查找此方法。如果仍未找到,则沿类的层次继续向上查找,直到Object类。,方法查找的路径,可以使用super关键字来指定方法查找的开始位置。,方法查找的路径,构造方法的继承,构造方法不能继承,但子类在创建对象时要对继承来自父类的成员进行初始化,因此,在创建子类时除了执行子类的构造方法外,还需要调用父类的构造方法,具体遵循原则如下:,当子类未定义构造方法时,创建对象时将无条件地调用父类的无参构造方法;对于父类的含参数构造方法,子类可以在自己构造方法中使用super调用它,但super调用语句必须是子类构造方法中的第一个可执行语句;子类在自己的构造方法中如果没有用super明确调用父类的构造方法,则在创建对象时,将自动先执行父类的无参构造方法,然后再执行自己定义的构造方法。,instanceof对象运算符,操作符instanceof用来判断对象是否属于某个类的实例。若是则返回true,否则返回false。,publicvoidmethod(Employeee)if(einstanceofManager)/dosomethingasaManagerelseif(einstanceofSecretary)/dosomethingasaSecretaryelse/dosomethingelse,例题:用向量实现,创建3个学生对象(学号、姓名、年龄)和4个教师对象(教工号、姓名、系别),并且输出。,创建向量的对象,importjava.util.*;classStuStringxh;Stringxm;intnl;publicStu(Stringxh1,Stringxm1,intnl1)xh=xh1;xm=xm1;nl=nl1;voiddisp()System.out.println(学生:+xh+xm+nl);,classTechStringzh;Stringxm;Stringxb;publicTech(Stringzh1,Stringxm1,Stringxb1)zh=zh1;xm=xm1;xb=xb1;voiddisp()System.out.println(教师:+zh+xm+xb);,publicclassStuTerpublicstaticvoidmain(Strings)Vectorst=newVector();st.addElement(newStu(101,李明,18);st.addElement(newStu(102,王大力,20);st.addElement(newStu(103,刘萍,19);st.addElement(newTech(10100,林小利,计算机);st.addElement(newTech(10101,熊平,计算机);st.addElement(newTech(10102,戴红兵,电力);st.addElement(newTech(10103,曲小军,电力);for(inti=0;ist.size();i+)if(st.elementAt(i)instanceofStu)(Stu)(st.elementAt(i).disp();else(Tech)(st.elementAt(i).disp();,到此为止final常量:final在变量之前,定义一个常量。finalfloatPI=3.14f;最终类:final在类前,表示该类不能被继承。finalclassC1classC2extendsC1/非法最终方法:final在方法前,该方法不能被覆盖。finalvoidm1(),final修饰符,抽象类,抽象类是没有具体实例对象的类。abstractclass抽象类不能被直接实例化。由abstract修饰的方法叫抽象方法,抽象方法没有方法体。abstracttypemethod_name(parameter_list);抽象方法必须声明在抽象类中。抽象类的子类必须实现超类中的所有抽象方法,或者将自己也声明为抽象的。构造方法不能声明为抽象方法。,代替方法体的定义,abstractclassShape.doublelength;doublewidth;doubleheight;doubleradius;.abstractdoublevol();,classCircleextendsShape*计算圆柱体的体积.doublevol()returnMath.PI*radius*radius*height;,classRectangleextendsShape*计算长方体的体积.doublevol()returnlength*width*height;,编程实现计算圆柱体和长方体的体积,abstractclassShapeabstractfloatarea();,classRectangleextendsShapepublicfloatwidth,height;Rectangle(floatw,floath)width=w;height=h;publicfloatarea()returnwidth*height;,classCircleextendsShapepublicfloatr;Circle(floatr)this.r=r;publicfloatarea()return3.14*r*r;,举例说明抽象类的应用。求若干个圆和矩形的面积之和。两个类Circle和Rectangle,完成相关参数的计算。,classCirclepublicfloatr;/圆的半径Circle(floatr)this.r=r;/this指这个对象的publicfloatarea()return3.14*r*r;,两个类Circle和Rectangle,完成相关参数的计算。,classRectanglepublicfloatwidth,height;/宽和高Rectangle(floatw,floath)width=w;/这里不需thisheight=h;publicfloatarea()returnwidth*height;,假设有若干个Circle,以及若干个Rectangle,希望计算它们的总面积,直接了当的做法是将它们分别放到两个对象数组中,用两个循环,加上一个加法,这种做法是不漂亮的。如果还有其它形状:triangle,ellipses等,上述方法显得“累赘”。我们希望有一种统一的表示,例如用一个数组shapeArea,接受所有的形状,然后用:for(i=0;ishapeArea.length;i+)area_total+=shapeAreai.area();,abstractclassShapeabstractfloatarea();,classCircleextendsShapepublicfloatr;Circle(floatr)this.r=r;/this指这个对象的publicfloatarea()return3.14*r*r;,classRectangleextendsShapepublicfloatwidth,height;Rectangle(floatw,floath)width=w;/这里不需thisheight=h;publicfloatarea()returnwidth*height;,publicclassAreaSum/主类publicstaticvoidmain(Stringargs)sharpshapeArea=newsharp4;shapeArea0=newCirclr(2);shapeArea1=newCirclr(3);shapeArea2=newRectangle(2,3);shapeArea3=newRectangle(5,6);for(i=0;ishapeArea.length;i+)area_total+=shapeAreai.area();System.out.println(“area_total=”+area_total);,方法覆盖实现动态多态性(运行时多态),方法重载实现静态多态性(编译时多态),多态性,多态性,方法重载指的是同一类中的相同名字的方法有多个方法覆盖指的是父类和子类中具有相同名字的方法,方法的重载,方法的重载(methodoverloading):一个类中有多个同名的方法带有不同的参数表。staticintabs(inta)staticlongabs(longa)staticfloatabs(floata)staticdoubleabs(doublea)方法重载时,要注意参数必须不同,即可以参数个数不同,也可以是类型不同;重载方法可以有不同类型的返回值。,publicclassPerson5staticintcount=0;protectedStringname;protectedintage;publicPerson5(Stringn1,inta1)name=n1;age=a1;count+;publicPerson5(Stringn1)/构造方法重载this(n1,0);/调用本类的构造方法publicPerson5(inta1)/构造方法重载this(未知名,a1);publicPerson5()/构造方法重载this(未知名);publicvoidprint()System.out.print(this.getClass().getName()+);System.out.print(count=+this.count+);System.out.println(+name+,+age);,构造方法的重载,classStudent5extendsPerson5protectedStringdept;Student5(Stringn1,inta1,Stringd1)super(n1,a1);dept=d1;Student5()this(未知名,0,未知系);publicstaticvoidmain(Stringargs)Person5p1=newPerson5(王小明,21);p1.print();Person5p2=newPerson5(朱小安);p2.print();Person5p3=newPerson5(19);p3.print();Person5p4=newPerson5();p4.print();Student5s1=newStudent5(陈小瑞,19,计算机系);s1.print();Student5s2=newStudent5();s2.print();,构造方法的重载,方法覆盖,方法的覆盖,子类可以继承超类的方法,也可以自己定义与超类的方法名、参数表及返回类型完全一致的方法,来覆盖超类的方法,即子类中的方法隐藏了超类中同名同参数表的方法。在子类中,若要调用超类中被覆盖的方法,可以使用super。,classRectangleintlength;intwidth;Rectangle(intlen,intwid)length=len;width=wid;/*计算矩形的周长.*/voidgetPerimeter()System.out.println(“矩形周长为+(2*(length+width);,方法的覆盖,classSquareextendsRectangleSquare(intlen)length=len;/*计算周长.*/voidgetPerimeter()System.out.println(“正方形周长为“+(4*length);,publicstaticvoidmain(Stringarg)RectanglerectObj=newRectangle(10,15);rectObj.getPerimeter();RectanglesqObj=newSquare(15);sqObj.getPerimeter();,调用父类方法,调用子类方法,classPointvoidprint()System.out.println(Thisisthesuperclass!);publicstaticvoidmain(Stringargs)Pointsuperp=newPoint();superp.print();/调用print方法Point3dsubp=newPoint3d();subp.print();/调用print方法classPoint3dextendsPointvoidprint()System.out.println(Thisisthesubclass!);,Thisisthesuperclass!,super.print();,Thisisthesuperclass!Thisisthesubclass!,Thisisthesuperclass!Thisisthesubclass!Thisisthesuperclass!,覆盖方法时需要注意,覆盖方法的方法名、返回类型和参数列表必须与它所覆盖的方法相同。若方法名相同,而参数表不同,则不是对父类方法的覆盖,而是对父类方法的重载。子类覆盖超类的方法不能比超类中定义的方法具有更严格的访问权限。例如,超类中method()的访问权限是public,子类中就不能定义private的method(),否则会出现编译错误。子类不能覆盖父类中声明为final的方法。子类必须覆盖父类中声明为abstract的方法,或继续声明为abstract。,使用父类对象的地方,可以用子类对象来代替,也是一种多态性。方法的形参是父类对象,实参可以是子类对象。例:publicclassEmployeepublicclassManagerextendsEmployee则:Managerm=newManager();Employeee=m;/多态性,合法语句或:Employeee=newManager();,父类,子类,多态性,当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。,classsuperA/定义超类superAinti=100;voidfun()System.out.println(“superA”);classTestpublicstaticvoidmain(Stringargs)superAa;subBb=newsubB();subCc=newsubC();a=b;a.fun();a=c;a.fun();,/定义superA的子类subBclasssubBextendssuperAintm=1;voidfun()System.out.println(“subB”);/定义superA的子类subCclasssubCextendssuperAintn=1;voidfun()System.out.println(“subC”);,运行结果为:subBsubC,类对象之间的类型转换,父类对象和子类对象的转换需要注意以下原则:,子类对象可以被视为是其父类的一个对象,反之则不可。若一个方法的形式参数定义的是父类的对象,则调用该方法的实际参数可以使用子类对象。若父类对象引用指向的实际是一个子类对象,则这个父类对象的引用可以用强制类型转换转化成子类对象的引用。,接口,为了使程序更适应网络传输,提高运行效率,增加安全性,降低程序复杂性,Java采用的是尽可能简单的面向对象的机制。最明显的特点是:它只支持单继承,不支持多继承。也就是说,一个类只能有一个超类。Java提供了接口用于实现多重继承,一个类可以实现多个接口。这样,既实现了多重继承的功能,同时又避免了C+中因多重继承而存在的隐患。,接口,接口的定义,接口(interface):是没有实现的方法和变量的集合。接口的定义interface静态常量;抽象方法;,可以是public,也可省略。若声明为public,该接口可以被所有的类和接口使用;否则只能被同一包中的类和接口使用。,接口中的变量全部隐含说明为publicstaticfinal,这意味着它们不能被实现接口的类改变.,接口中的方法都是抽象方法,只有定义而没有实现。默认的方法修饰符是publicabstract,示例interfaceStudent_infointyear=2011;intage();voidoutput();,/publicfinal
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!