zoukankan      html  css  js  c++  java
  • 转转转!java继承中的this和super

     学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云。只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键的,产生的印象才是最深的。针对文章标题,先看一下以下代码:

    public class FatherChild { 
        public static void main(String[] args) {   
            //  主方法开始      
            Child c = new Child();             
            //  实例化
            }
                                  }
     
     
     
    class Father { 
        public Father() {  
             System.out.println("父类无参构造函数");
            }  
            public Father(String name) {   
                System.out.println("父类有参构造函数");
                }
          }
     
     
     
     
      class Child extends Father { 
        public Child() {
            this("dd");
            System.out.println("子类无参构造函数");
            }  
        public Child(String name) {
            super("dd");   
            System.out.println("子类有参构造函数");
            }
        }
        

     代码运行的结果:

    父类有参构造函数
    子类有参构造函数
    子类无参构造函数

    为什么会有以上的结果呢?让我们先了解一下java的继承:

    继承是一种由已有的类创建新类的机制。利用继承,可以先创建一个拥有共同属性的一般类,根据该一般类再创建具有特殊属性的新类。由继承而得到的类称为子类(Subclass),被继承的类被称为父类(Superclass)。

    直接或间接被继承的类都是父类。子类继承父类的状态和行为,同时也可以修改父类的状态和行为,并添加新的状态和行为。Java中不支持多重继承。

          以上代码中Child类继承了Father类,在FatherChild类中执行Child c = new Child();时,会调用Child类的无参构造方法,在其无参的构造方法中有这样一句代码:this("dd");这又是神马意思呢?这时我们就有必要来了解一下java继承中this与super关键字的作用了:

    this的第一个作用
    
    java中在一个构造方法中可以调用一次其他的构造方法,并且这条语句必须在这个构造方法的第一行,this表示调用它的对象
    this的第二个作用
    表示引用成员变量i(而不是形参i)
    将局部变量或形参赋值给成员变量的这种情况,通常可以省略this,如写为:i=i;
    java编译器会自动将=左边的i
    当成成员变量,=右边的当成形参。但不利于阅读代码
    this的第三个作用
    返回当前对象

    super的用法与this类似,主要用于调用父类构造方法

     对于继承中的构造方法有以下说明:


    1.子类的构造过程中必须调用其基类的构造方法;
    2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法;
      如果调用super,必须写在子类构造方法的第一行;
    3.如果子类的构造方法中没有显式调用基类构造方法,则系统默认调用基类无参数的构造方法;
    4.如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。

     

    那么我们就可以明白,child类中无参构造方法中的this("dd");这句代码其实是调用了Child类中的有参构造方法,而其有参构造方法中又super(“dd”);调用了父类的有参构造方法,所以才有了以上的打印结果。

  • 相关阅读:
    2016百度之星资格赛 Problem B(大数+组合数)
    HDU 4380 Farmer Greedy(叉积和三角形知识的综合应用)
    C++ STL (备忘)
    【Linked List Cycle II】cpp
    【Linked List Cycle】cpp
    【Copy List with Random Pointer】cpp
    【Reverse Nodes in k-Group】cpp
    【Swap Nodes in Pairs】cpp
    【Remove Nth Node From End of List】cpp
    【Rotate List】cpp
  • 原文地址:https://www.cnblogs.com/tenWood/p/6523741.html
Copyright © 2011-2022 走看看