河南经贸职业学院—信息管理系主讲教师:武俊琢第六讲类与对象(三)访问权限、类的继承、对象的上转型信息管理系武俊琢河南经贸职业学院—信息管理系主讲:武俊琢**温故**方法的重载成员方法重载构造方法的重载static关键字类方法与类变量实例方法与实例变量this关键字包package命令import命令河南经贸职业学院—信息管理系主讲:武俊琢本讲要点访问权限私有变量和私有方法(private关键字)共有变量和共有方法(public关键字)保护变量和保护方法(protected关键字)友好变量和友好方法public类与友好类类的继承(重点)创建子类子类的继承性成员变量的隐藏和方法的重写final类和final方法对象的上转型对象多态性河南经贸职业学院—信息管理系主讲:武俊琢访问权限用一个类创建一个对象后,通过对象可以访问这个类的成员变量和成员方法,但这种访问是有一定限制的。这种限制取决于在声明变量和成员方法时使用的修饰符:public、private、protected、友好(未使用修饰符)。河南经贸职业学院—信息管理系主讲:武俊琢private变量和方法(一)访问权限最小,只能在同一个类中被访问。同一个类的方法中直接访问。同一个类的对象也可以引用本类的私有成员。classTom{privatefloatweight;privatestaticStringname;privatevoidout(){System.out.println(name+体重:+weight+斤);}publicstaticvoidmain(String[]args){Tom.name=汤姆猫;Tomcat=newTom();cat.weight=20;//或cat.setWeight(20);cat.out();}}河南经贸职业学院—信息管理系主讲:武俊琢private变量和方法(二)类中的私有成员不能在另一个类中引用私有的类变量和类方法也只能在本类中使用。classJerry{publicstaticvoidmain(String[]args){Tom.name=汤姆猫;//非法使用类变量Tomcat=newTom();cat.weight=20;//非法引用变量weightcat.setWeight(20);//合法地调用方法setWeight()cat.out();//非法调用方法out()}}河南经贸职业学院—信息管理系主讲:武俊琢public变量和方法访问权限最大,可以在不同类、不同包的类中访问。packagep1;publicclassArea{publicfloatgetArea(floatr){System.out.print(方法一:);return3.14f*r*r;}publicdoublegetArea(floatx,inty){System.out.print(方法二:);returnx*y;}publicfloatgetArea(intx,floaty){System.out.print(方法三:);returnx*y;}publicdoublegetArea(floatx,floaty,floatz){System.out.print(方法四:);return(x+x+y*y+z*z)*2.0;}}河南经贸职业学院—信息管理系主讲:武俊琢public变量和方法packagep2;importp1.Area;classAreaTest{publicstaticvoidmain(String[]args){Areaa=newArea();System.out.println(a.getArea(2.0f));System.out.println(a.getArea(12,2.7f));System.out.println(a.getArea(2.7f,12));System.out.println(a.getArea(2.0f,10,20));}}河南经贸职业学院—信息管理系主讲:武俊琢友好变量和方法不使用修饰符:public、private、protected,即缺省这些修饰符的情况。比private权限级别高一级友好成员只能被同类或同包中的不同类引用。例:第五讲作业二河南经贸职业学院—信息管理系主讲:武俊琢protected变量和方法比友好成员高一级,比public低一级。不能在不同包的类中被引用。如果不同包中的类是本类的子类,则子类的对象可以引用本类的受保护成员。河南经贸职业学院—信息管理系主讲:武俊琢方法的访问控制(总结)publicprotected友好private同类同包不同类不同包子类通用不同情形下对象访问说明符河南经贸职业学院—信息管理系主讲:武俊琢public类和友好类如果定义类时,使用public修饰,则该类为公共类。可以在不同的包中被其他类使用。如果未使用修饰符,则为友好类。只能被同包里的类使用。河南经贸职业学院—信息管理系主讲:武俊琢类的继承继承:由已有类创建新类的机制。新类继承已有类的成员,并可根据需要增加自己新的成员。已有类称为父类,新类称为已有类的子类。Java不支持多继承,一个子类只能有一个父类,但一个父类可以派生出若干个子类。publicclassPerson{Stringname;intage;publicvoidsetAge(intage){this.age=age;}publicvoidout(){System.out.println(姓名:+name+年龄:+age+岁);}}河南经贸职业学院—信息管理系主讲:武俊琢子类publicclassStudentextendsPerson{intjava,flash;voidlearn(){System.out.println(name+islearning!);}voidoutStudent(){System.out.println(java:+java+\tflash:+flash);}publicstaticvoidmain(String[]args){Students=newStudent();s.name=孙悟空;s.age=500;s.java=80;s.flash=85;s.learn();s.outStudent();s.out();}}河南经贸职业学院—信息管理系主讲:武俊琢类的继承性子类和父类在同一包中子类可继承其父类中非私有成员(不是private的成员)子类和父类不在同一包中子类只能继承受保护的和共有成员(public、protected)河南经贸职业学院—信息管理系主讲:武俊琢成员变量的隐藏和方法的重写成员变量的隐藏:如果在子类中定义了与父类中同名的变量,父类的这个变量将被隐藏。(P65错误)方法的重写:如果子类中定义了与父类同名、同类型、相同参数的方法,则称子类覆盖了父类的方法。这是子类的一种“变异”,子类可以根据需要把从父类继承来的方法进行改造。比如:在student类中重新声明变量age和方法out()publicstaticvoidmain(String[]args){Students=newStudent();s.name=孙悟空;s.age=500;s.java=80;s.flash=85;s.learn();s.out();}河南经贸职业学院—信息管理系主讲:武俊琢super变量特殊变量super,提供了对父类的访问。1、可以使用super访问父类被子类隐藏的变量或覆盖的方法。如:在student类中改写out方法时,可以使用super.out();来调用父类中对name和age的输出。调用父类的变量super.name。2、可能通过Super([参数表])来高用父类的构造方法。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。如:在Person类中只定义带参数的构造方法,如何定义子类Student的构造方法???????河南经贸职业学院—信息管理系主讲:武俊琢final类和final成员final类:不能派生子类。final变量,其值不能在程序运行过程中改变,是常量。final方法,不能被子类方法重写。河南经贸职业学院—信息管理系主讲:武俊琢对象的上转型对象父类的变量能否引用子类的对象?能。子类的变量能否引用父类的对象?不能。父类的变量称为子类对象的上转型对象。Personp;p=newStudent();Students;s=newStudent();p=s;新增变量新增方法从父类继承或重写的变量从父类继承或重写的方法s的上转型对象S对象ps河南经贸职业学院—信息管理系主讲:武俊琢上转型对象操作说明上转型对象不能操作子类新增成员上转型对象可以操作从父类继承的成员,或在子类中重写的父类成员。上转型对象在被改写的成员时,调用子类成员,而非父类成员。上转型对象通过强制类型转换成为子类对象。P68,例4.21河南经贸职业学院—信息管理系主讲:武俊琢多态性在程序中同一符号或名字在不同情况下具有不同解释的现象称为多态性。表现在两方面:方法的重载。对象的上转型对象。子类可以改写父类的方法,而上转型对象(父类的对象)可以调用改写后的方法。不同的子类可能改写的内容不同。比如:动物类中的cry()方法,在子类“猫”中可以改写为“喵喵”,而在子类“狗”中可以改定为“汪汪”。猫类的和狗类的上转型对象在调用cry()方法时是各不相同的。(P70例4.22)河南经贸职业学院—信息管理系主讲:武俊琢小结访问权限种类,级别顺序子类子类继承成员的隐藏和重写对象的上转型对象多态性河南经贸职业学院—信息管理系主讲:武俊琢技能训练六类的继承训练目的使学生了解类成员的访问权限设置与应用使用学生掌握子类的创建,理解子类的继承,成员变量的隐藏与成员方法的重写。相关知识点子类的构造方法与父类构造方法之间的关系:子类构造方法的第一条语句隐含调用父类的构造方法—super();子类继承父类中的非private成员(在同一个包中)子类继承父类中的非private与非友好成员(不同的包中)子类中的成员与父类中成员相同,则隐藏父类成员父类的对象变量(对象的上转型对象)可以引用子类的对象河南经贸职业学院—信息管理系主讲:武俊琢作业与上机训练要求1、创建父类Animal和子类Dog要求如下:(1)Animal(父类)中定义至少两个成员变量,一个带参数的构造方法,一个成员方法。(2)Dog(子类)中定义两个以上成员变量,隐藏父类中的一个成员变量,重写父类中的一个成员方法。(3)对子类进行实例化,输出对象的成员变量值(包括从父类继承而来的变量),调用对象的各成员方法(包括从父类继承来的方法)。2、按要求补充代码(附下页)3、调试P70例4.22,理解上转型对象产生的多态性。河南经贸职业学院—信息管理系主讲:武俊琢publicclassZuoye2{privatefloatr;//r为圆的半径/*补充代码段1*/publicfloatcircle()//计算圆的面积{return3.14f*r*r;}}classTest{publicstaticvoidmain(String[]args){Zuoye2z=newZuoye2();/*补充代码段2,计算输出半径为10的圆的面积*/}}