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”);调用了父类的有参构造方法,所以才有了以上的打印结果。

    智者,寡言而多行
  • 相关阅读:
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS博客作业02--线性表
    c博客06-2019-结构体&文件
    C博客作业05--2019-指针
    C语言博客作业04--数组
    c语言博客作业03--函数
    C语言博客作业02--循环结构
    深入理解Java线程池原理
    Offer快到碗里来——聊聊线程池
  • 原文地址:https://www.cnblogs.com/angryprogrammer/p/3202067.html
Copyright © 2011-2022 走看看