欢迎来到天天文库
浏览记录
ID:52517667
大小:230.55 KB
页数:12页
时间:2020-04-09
《继承接口和内部类.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、●继承●多态●抽象类●接口●内部类第四章继承、接口和抽象类●继承●继承的特点●extends父类名;若无extends,则默认父类Object●子类将继承父类成员,但不能直接访问父类private成员●单继承,多层继承●子类对父类可做扩展和特殊化(1)创建新的成员:成员变量和方法(2)重新定义父类中已有的成员变量:隐藏(3)重新定义父类中已有的方法:覆盖(override)子类中的方法应与父类中的被覆盖的方法有完全相同的:参数列表、返回值;而且访问权限不能更严格●super():调用父类被覆盖的方法;父类构造方法例:Circle.java,Cylinder.java●继承
2、●继承的特点●子类的构造方法(1)若子类的构造方法中,没有使用super调用父类的构造方法和this调用重载的其他构造方法,则在创建子类对象时,系统默认先调用父类的无参构造方法,然后执行子类的构造方法;(2)在子类的构造方法中使用super(参数)调用父类的含参构造方法,super必须是第一句(3)this()和super()不能同时出现例:Sandwich.java(构造方法调用次序)●多态一个引用变量可以引用多种实际类型的现象称为多态,在运行时能够自动选择调用适当的方法称为动态绑定●引用变量的类型转换●子类引用变量转换成父类引用变量(1)规则:沿着继承层次,从下往上,
3、子类可以自动转换成父类(2)转换时机:赋值,方法调用(参数传递)EmployeeManagerSecretaryProgrammerManagerm=newManager(…);Employeee=m;//赋值时发生自动转换e.raiseSalary();//正确e.setBonus();//错误raiseSalary()setBonus()●多态●引用变量的类型转换●父类引用变量转换成子类引用变量(强制转换)子类引用变量=(子类)父类引用变量EmployeeManagerSecretaryProgrammerEmployeee=newEmployee(…);Manage
4、rm=e;//错误Employeee=newEmployee(…);Managerm=Manger(e);//强制转换●多态●引用变量的类型转换●Object类,toString方法例:PolyTest.java多态:为父类对象设计的任何代码都可以应用于子类●动态绑定●对象方法的执行过程●优点:无需对现存代码进行修改就可对程序进行扩展CnCn-1Cn-2C1C0……顺序查找●instanceof对象引用instanceof类(或接口)例:Polymorphism.java●抽象类●抽象类●abstract●不包含方法定义的方法称为抽象方法●任何包含抽象方法的类必须声明为抽
5、象类●不能生成抽象类的对象●抽象类的子类必须覆盖所有的抽象方法,才能生成对象,否则仍然是抽象类例:AbstractClassTest.javaarea()CircleSquareShapearea()area()area()Triangle●接口●接口●描述类具有什么功能,而不给出每个功能的具体实现●接口中的方法和成员变量●定义接口方法:隐含为publicabstract变量:隐含为publicstaticfinal[public]interface接口名[extends接口列表]{返回类型方法名();…常量类型常量名=...;…}●接口●接口●使用接口当一个类声明imp
6、lements某一interface时,必须具体实现该interface中定义的抽象方法,并把此方法定义为public的(抽象类除外)●利用接口可实现多重继承,一个类可以实现一个或多个接口例:InterfaceTest.java接口与抽象类的区别:●接口中,数据必须是常量,抽象类可以有非常量的数据;●接口中,每个方法只有方法名定义,没有实现,抽象类可以有具体的实现方法;●Java对类的扩展只允许单重继承,对接口允许多重继承;●强是关系:明显地描述父子关系,用抽象类;弱是关系:对象拥有某种属性,用接口;●内部类在一个类的内部嵌套定义的类●成员内部类●可以访问外部类的成员变量
7、和方法;反过来不行●可以声明为private,protected,public或缺省●若为static,则不能访问非static成员,很少使用●若局部变量,内部类的成员变量和外部类的成员变量重名则分别用变量名;this.变量名:外部类名.this.变量名表示●引用:若为public,则外部类名.内部类名Outero=newOuter();Outer.Inneri=o.newInner();或Outer.Inneri=newOuter.newInner();例:InnerClassTest.java●内部类●方法中的内部类●可以
此文档下载收益归作者所有