zoukankan      html  css  js  c++  java
  • Java基础-super关键字与this关键字

    用super调用父类构造方法
    类如果没有显式声明构造方法,则自动生成无参数的默认构造方法。
    1.先用一个无参数的父类构造方法验证一下,
    执行子类构造方法会自动调用父类的构造方法。测试代码:
    复制代码
    class Human3{
        public Human3(){
            System.out.println("构造一个人");
        }
    }
    class Pupil3 extends Human3{
        public Pupil3(){
    //        super(); //本句注释与不注释执行结果是一样的
            System.out.println("构造了一个学生 ");
        }
    }
    public class Example3 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
         Pupil3 pupil3=new Pupil3();   
        }
    }
    复制代码

    运行结果:

    表明,子类构造方法会默认调用父类的构造方法,对于无参的父类构造方法,写不写super()输出结果是一样的。

    2.用一个有参数的父类构造方法验证一下。
    执行子类构造方法会自动调用父类的构造方法。测试代码:
    复制代码
     1 class Human3 {
     2 
     3     private String name;
     4     private int age;
     5 
     6     public Human3(String name) {
     7         super();
     8         this.name = name;
     9         System.out.println("构造一个人");
    10     }
    11 
    12 }
    13 
    14 class Pupil3 extends Human3 {
    15     private String ID;
    16     private String name;
    17     private int age;
    18 
    19     public Pupil3(String name, String iD, int age) {
    20         super(name);
    21         ID = iD;
    22         this.age = age;
    23         System.out.println("构造一个小学生");
    24     }
    25 
    26 }
    27 
    28 public class Example3 {
    29 
    30     public static void main(String[] args) {
    31         // TODO Auto-generated method stub
    32         Pupil3 pupil3 = new Pupil3("张三", "p123", 10);
    33     }
    34 }
    复制代码

    运行结果

    3.此时如果注释掉super方法就会报错。

    报错原因:子类必须继承父类的构造方法,如果父类构造方法中没有参数传递,那么默认是不写super()继承父类的构造方法的。

    Human3类的构造方法没有无参数的构造方法,所以,必须继承父类有参数的构造方法,所以,必须写super关键字来继承父类的有参数的构造方法。

    除了调用父类构造方法外,super还可在子类中指代父类对象,用于:
    访问被子类隐藏的父类字段,
    调用被子类覆盖的父类方法。
    使用形式:

        super.父类字段名

        super.父类方法名(可选实参表)

     
    4.实例成员(实例字段、实例方法):没有static修饰的成员。
    实例成员就是非静态成员,实例成员为类对象所独占。
    使用对象(实例)作前缀引用实例成员,语法形式:

          对象名.方法名(实参表)

          对象名.字段名

    关键字this用于指代当前的对象。因此,类内部可以使用this作前缀引用实例成员。
    例如,Pupil3类中可用this.age引用实例字段age。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    作者:Seachal
    出处:http://www.cnblogs.com/ZhangSeachal
    如果,您认为阅读这篇博客让您有些收获,不妨点击一下左下角的【好文要顶】与【收藏该文】
    如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】
    如果,您对我的博客内容感兴趣,请继续关注我的后续博客,我是【Seachal】

    我的GitHub       我的CSDN 我的简书

    本博文为学习、笔记之用,以笔记记录作者学习的知识与学习后的思考或感悟。学习过程可能参考各种资料,如觉文中表述过分引用,请务必告知,以便迅速处理。如有错漏,不吝赐教!

  • 相关阅读:
    D. Babaei and Birthday Cake--- Codeforces Round #343 (Div. 2)
    Vijos P1389婚礼上的小杉
    AIM Tech Round (Div. 2) C. Graph and String
    HDU 5627Clarke and MST
    bzoj 3332 旧试题
    codeforces 842C Ilya And The Tree
    codesforces 671D Roads in Yusland
    Travelling
    codeforces 606C Sorting Railway Cars
    codeforces 651C Watchmen
  • 原文地址:https://www.cnblogs.com/Seachal/p/4886964.html
Copyright © 2011-2022 走看看