4.2.1 方法的覆写[共6页]
- 格式:pdf
- 大小:249.67 KB
- 文档页数:2
第4章 ■ 面向对象高级知识
211
4.2 覆写
继承性的主要特征是子类可以根据父类已有的功能进行功能的扩展,但是在子
类定义属性或方法时,有可能出现定义的属性或方法与父类同名的情况,这样的操
作就称为覆写。
4.2.1 方法的覆写
当子类定义了和父类的方法名称、返回值类型、参数类型及个数完全相同的方法时,就称为方法的
覆写。为了更好地帮助读者理解方法覆写的意义,下面编写两个测试程序进行说明。
范例4-11:没有实现方法覆写。
class A {
public void fun() { // 在父类中定义的方法
System.out.println("A类中的fun()方法。") ;
}
}
class B extends A { // 定义子类,此时没有覆写任何方法
}
public class TestDemo {
public static void main(String args[]) {
B b = new B() ; // 实例化子类对象
b.fun() ; // 调用fun()方法
}
}
程序执行结果: A类中的fun()方法。
本程序在定义子类B时没有定义任何方法,所以在主方法中利用B类的实例化对象调用的fun()方
法是通过A类继承而来的。
范例4-12:实现方法覆写。
class A {
public void fun() { // 在父类中定义的方法
System.out.println("A类中的fun()方法。") ;
}
}
class B extends A { // 定义子类,此时没有覆写任何方法
public void fun() { // 此处为覆写
System.out.println("B类中的fun()方法。") ;
}
}
public class TestDemo {
public static void main(String args[]) {
B b = new B() ; // 实例化子类对象
b.fun() ; // 调用fun()方法,此时方法被覆写,所以调用被覆写过的方法
方法的覆写
第一行代码Java(视频讲解版)
212
}
}
程序执行结果: B类中的fun()方法。
本程序在B类中定义了一个与A类完全一样的fun()方法,所以当实例化B子类对象,调用fun()方
法时,将不再执行父类的方法,而是直接调用已经被子类覆写过的方法。
一个类可能会产生多个子类,每个子类都可能会覆写父类中的方法,这样一个方法就会根据不同的
子类有不同的实现效果。
范例4-13:定义更多的子类。
class A {
public void fun() { // 在父类中定义的方法
System.out.println("A类中的fun()方法。") ;
}
}
class B extends A { // 定义子类,此时没有覆写任何方法
public void fun() { // 此处为覆写
System.out.println("B类中的fun()方法。") ;
}
}
class C extends A {
public void fun() { // 此处为覆写
System.out.println("C类中的fun()方法。") ;
}
}
public class TestDemo {
public static void main(String args[]) {
B b = new B() ; // 实例化子类对象
b.fun() ; // 调用fun()方法,此时方法被覆写,所以调用被覆写过的方法
C c = new C() ; // 实例化子类对象
c.fun() ; // 调用fun()方法,此时方法被覆写所以调用被覆写过的方法
}
}
程序执行结果: B类中的fun()方法。(“b.fun()”语句执行结果)
C类中的fun()方法。(“c.fun()”语句执行结果)
本程序为A类定义了两个子类:B类和C类,并且都覆写了A类中的fun()方法,当实例化各自类
对象并且调用fun()方法时,调用的一定是被覆写过的方法。
注意:关于覆写方法的执行问题。
对于方法的覆写操作,读者一定要记住一个原则:如果子类覆写了方法(如B类中
的fun()方法,或者可能有更多的子类也覆写了fun()方法),并且实例化了子类对象
(B b
= new B())
时,调用的一定是被覆写过的方法。
简单地讲,就是要注意以下覆写代码执行结果的分析要素。
• 观察实例化的是哪个类;