java中子类重写父类方法的思想本质

java语言中,在子类中定义与父类同返同名同参的方法将会出现“重写(覆写)”,子类将屏蔽父类的相同方法,调用子类的方法将不会调用到父类的该方法。

许多初学者也许会被“覆写”一词迷惑,以为覆盖掉了父类的方法,其实这两种方法是同时独立存在的,只是子父类调用该方法的入口不一样,彼此互不干扰。

 1 /*
 2     需求:设计一个简单的java程序,证明子类重写父类方法的过程
 3     思路:    1、创建父类对象,通过父类对象调用该方法
 4             2、创建子类对象,通过父类对象调用该方法
 5             3、通过子类对象调用该方法
 6 */
 7 class  RerridingTest
 8 {
 9     public static void main(String[] args)
10     {
11         Father f = new Father();
12         f.show();
13         Child c = new Child();
14         f.show();//创建子类对象并没有“覆盖”掉父类自己的show()方法
15         c.show();//子类调用同名方法时直接访问自己定义的方法,并没有访问父类的方法
16     }
17 }
18
19 class Father
20 {
21     void show(){
22         System.out.println("father show run.");
23     }
24 }
25
26 class Child extends Father
27 {
28     void show(){
29         System.out.println("child show run.");
30     }
31 }
32
33 /*
34     总结:重写过程是
35             创建子类对象时,因为子类中已有定义该方法,故不从父类继承该方法;
36             调用方法时,判断调用对象在内存中是何种类型,然后到相应类型的方法区中寻找该方法
37 */
结果:

  

总结:重写过程是
         创建子类对象时,因为子类中已有定义该方法,故不从父类继承该方法;
         调用方法时,判断调用对象在内存中是何种类型,然后到相应类型的方法区中寻找该方法
时间: 2024-10-08 15:20:42

java中子类重写父类方法的思想本质的相关文章

java中子类覆盖父类方法所必须满足的条件

一.描述 子类重写(覆盖)父类的方法必须满足的条件: 1.父类中的方法在子类中必须可见,即子类继承了父类中的该方法(可以显式的使用super关键字来访问父类中的被重写的方法), 如果父类中的方法为private类型的,那么子类则无法继承,也无法覆盖. 2.子类和父类的方法必须是实例方法,如果父类是static方法而子类是实例方法,或者相反都会报错. 如果父类和子类都是static方法,那么子类隐藏父类的方法,而不是重写父类方法. 3.子类和父类的方法必须要具有相同的函数名称.参数列表,并且子类的

关于Java中子类调用父类方法

当一个类继承于另一个类,子类中没有父类的方法时.用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找. 当一个方法只在父类中定义时,调用该方法时会使用父类中的属性. 如果该方法中又调用了其他方法,那么还是按照之前的顺序,先在子类中查找,再在父类中查找. package Temp; class A { int x = 6; private int y = 2; public A(int a) { x = a; } int getz() { int z; z = x /

关于继承时子类重写父类方法和覆盖父类变量的若干问题

假设,子类重载父类的方法,并将子类的成员覆盖. 创建子类对象实例,将其上转型成父类. 例子1 public class Parent { public void init() { System.out.println("1 init parent"); this.demo(); } public void demo() { System.out.println("2 demo parent"); } } public class Son extends Parent

Java中子类和父类的构造函数?

这篇文章总结了关于Java构造的常见??问题. 1)为什么创建一个子类对象要也需要调用父类的构造函数? class Super { String s; public Super(){ System.out.println("Super"); } } public class Sub extends Super { public Sub(){ System.out.println("Sub"); } public static void main(String[] a

java 中继承时子类——重写父类方法

1. 普通类继承,并非一定要重写父类方法.2. 抽象类继承,如果子类也是一个抽象类,并不要求一定重写父类方法.如果子类不是抽象类,则要求子类一定要实现父类中的抽象方法.3. 接口类继承.如果是一个子接口,可以扩展父接口的方法:如果是一个子抽象类,可以部分或全部实现父接口的方法:如果子类不是抽象类,则要求子类一定要实现父接口中定义的所有方法. 接口中的方法默认的是public abstract 1 package com.hh.Object; 2 3 public class Interface

java子类重写父类方法测试

父类 package com.yjm.Tes; public abstract class Ts { protected void Test(String str ,String s){ System.out.println("ts..."); } } 子类 package com.yjm.Tes; public class Test extends Ts { protected final void Test(String str, String s) { System.out.pr

java中子类与父类中隐含的this引用的分析

/* 看一下下面的程序,看是否你的答案和运行的答案是否一致! */ class Parent{ public int x; public Parent p; public Parent(){} public Parent(int x){ this.x=x; p=this; } public void f(){ System.out.println("Parent::f()"); } public void g(){ System.out.println("Parent::g(

java中子类继承父类程序执行顺序问题

Java中,new一个类的对象,类里面的静态代码块.非静态代码.无参构造方法.有参构造方法.类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证.比如新建一个测试父类. public class FatherTest { private String name; FatherTest(){ System.out.println("--父类的无参构造函数--"); } FatherTest(String name){ this.name=name; System.out

[转]Java中子类调用父类构造方法的问题分析

在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的? 答案如下:    当你new一个子类对象的时候,必须首先要new一个父类的对像出来,这个父类对象位于子类对象的内部,所以说,子类对象比父类对象大,子类对象里面包含了一个父类的对象,这是内存中真实的情况.构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出来,那么肯定要调用其构造方法,所以: 第一个规则:子类的构造过程中,必须调用其父类的构造方