• 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 我的简书

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

  • 相关阅读:
    学习Tomcat(三)
    TIME_WAIT 优化注意事项
    TIME_WAIT 优化
    TCP(一)
    TCP(二)
    TCP(三)
    5-14 练习题及答案
    5-14 进程池
    5-11 操作系统介绍
    5-8套接字socket
  • 原文地址:https://www.cnblogs.com/Seachal/p/4886964.html
Copyright © 2020-2023  润新知