首页 理论教育 Java程序设计:子类访问父类成员方法

Java程序设计:子类访问父类成员方法

时间:2023-11-01 理论教育 版权反馈
【摘要】:如果子类的成员变量和父类中可见的成员变量名字相同,则子类访问该父类成员变量必须使用super关键字区分,否则可以省略super关键字。子类方法的访问权限不能低于父类相应方法的访问权限。定义一个继承自HisGraph类的子类His Triangle3,子类重写父类求面积和周长的方法,并测试。图4-13HisTriangle3类在子类get Area()方法中,程序第26行利用super关键字调用了父类同名的实例方法get Area(),这里super关键字不能省略。

Java程序设计:子类访问父类成员方法

super关键字引用了当前类的父类,子类可以利用super关键字访问父类在子类中可见的成员变量,语法格式为:super.成员变量。如果子类的成员变量和父类中可见的成员变量名字相同,则子类访问该父类成员变量必须使用super关键字区分,否则可以省略super关键字。

子类也可以利用super关键字调用父类在子类中可见的实例方法,语法格式为:super.方法名(参数列表)。如果子类中没有声明与父类中同名的实例方法,调用父类的成员方法时可以省略super关键字。在方法重写的情况下,子类中必须使用super关键字调用父类被重写的实例方法,否则调用的是子类中同名的实例方法。

方法重写又称方法覆盖,是指如果子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数列表,则新方法将覆盖原有的方法,子类重写了父类的方法。子类可继承父类中的方法,无须编写相同的方法,但有时子类不想原封不动地继承父类的某个(些)方法,而是想做一定的修改,就会用到方法重写。

关于方法重写还需要注意以下几点:

(1)子类方法的返回值必须和父类方法的返回值相同或是其子类。

(2)子类抛出的异常不能超过父类相应方法抛出的异常。

(3)子类方法的访问权限不能低于父类相应方法的访问权限。

(4)如果父类定义的实例方法在子类中是不可见(例如父类私有方法)的,那么子类定义的方法即使满足方法重写的其他条件,也不能称为方法重写,这两个方法完全没有关系。

(5)结合后续多态性,方法重写本质是依据执行时对象的类型来决定调用哪个方法,而静态方法是类的方法,在编译阶段就已经绑定了类型。对于静态方法,应该直接使用类名来访问,因此,重写仅针对实例方法。如果父类中的静态方法在子类中得到重新定义,可以通过“父类名.静态方法”调用父类的静态方法。

(6)要区分方法重写和方法重载。方法重载是指同一个类中可以定义多个具有相同名字的方法,这些方法参数列表不同;而方法重写发生在父类和子类之间,子类重写父类中已定义过的某个方法,方法名、参数列表和返回类型与父类相同。

【例4-3】

定义一个继承自HisGraph类的子类His Triangle3,子类重写父类求面积和周长的方法,并测试。

所有平面图形都有面积和周长,因此父类HisGraph抽象出了求面积和周长的方法,但是不同的图形其功能实现是不同的,因此,子类继承时如果需要调用相关功能,则需要重写相关方法。在Eclipse中,可以借助源代码生成工具辅助实现方法重写,步骤如下:

步骤1:复制His Triangle2.java,在同一个包下粘贴,并重命名为His Triangle3.java,在代码区点击鼠标右键,选择弹出菜单【Source】下的【Override/Implement Methods】选项,如图4-11所示。(www.xing528.com)

图4-11 找到“Override/Implement Methods”

步骤2:在弹出的对话框中选择父类需要被重写的get Area()方法和getCircumference()方法,如图4-12所示。

图4-12 选择被重写的方法

步骤3:点击【OK】按钮后即可生成默认代码,在此自动生成的代码的基础上修改即可。重写后的方法如图4-13所示。

图4-13 HisTriangle3类

在子类get Area()方法中,程序第26行利用super关键字调用了父类同名的实例方法get Area(),这里super关键字不能省略。程序第32行也是如此。

步骤4:下面通过测试类His Triangle3Test来演示方法重写效果,如图4-14所示。

图4-14 方法重写效果演示

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈