• 关键字--super


    关键字super

         在Java类中使用super来调用父类中的指定:

    • super可用于访问父类中定义的属性
    • super可用于调用的父类中定义的成员方法
    • super可用于在子类构造方法中调用父类的构造器

    注意:

    • 尤其当子父类出现同名成员时,可以用super进行区分
    • super的追溯不仅限于直接父类(super不仅可以调用父类,还可调用父类的父类)
    • super和this的用法很相像,this代表本类对象的引用,super代表父类的内存空间的表示
    public class kk extends Kids{
        public void text(){
            super.salary = 1;//salary为kids的父类ManKind中的成员变量
            super.yearsOld = 100;//yearsOld为Kid的成员变量
            super.employeed();//可以用super追溯父类的成员方法
            super.manOrWorman();//可以使用super向上追溯父类的父类的成员方法
        }
    }
    public class Kids extends ManKind {
        public int yearsOld;
    
        public int getYearsOld() {
            return yearsOld;
        }
    
    }
    public class ManKind {
        public int sex;
        public int salary;
    
        public void manOrWorman(){
            
        }
        public void employeed(){
           
        }
    
    }
    

    public class kid extends man {
    
        public void show(){
            super.showInfo();
        }
    
        public static void main(String[] args) {
            kid k = new kid();
            k.show();
        }
    }
    public class man {
        String name = "sa";
        int age =10;
    
        public void showInfo(){
            System.out.println("name"+name+"age"+age);
        }
    }
    

    调用父类的构造器

    • 子类中所有的构造器默认都会访问父类中空参数的构造器
    public class man {
        String name = "sa";
        int age =10;
    
        public man(){//显式无参构造
            System.out.println("mankind");
        }
    
    //    public void showInfo(){
    //        System.out.println("name"+name+"age"+age);
    //    }
    }
    
    public class kid extends man {
    
    //    public void show(){
    //        super.showInfo();
    //    }
    
        public static void main(String[] args) {
            kid k = new kid();//new kid()是在调用kid类的默认无参构造方法,在这个过程中就会使用父类的无参构造
    
        }
    }
    
    //相当于下面
    public class man {
        String name = "sa";
        int age =10;
    
        public man(){//显式无参构造
            System.out.println("mankind");
        }
    
    //    public void showInfo(){
    //        System.out.println("name"+name+"age"+age);
    //    }
    }
    
    public class kid extends man {
          
          public kid(){
              super();
          }
    
    //    public void show(){
    //        super.showInfo();
    //    }
    
        public static void main(String[] args) {
            kid k = new kid();//new kid()是在调用kid类的默认无参构造方法,在这个过程中就会使用父类的无参构造
    
        }
    }
    
    
    • 当父类中灭有空参数的构造器时,子类的构造器必须通过this(参数列表)或者super(参数列表)语句指定调用本类或者父类中相应的构造器,且必须放在构造器的第一行
    • 如果子类构造器中既没有显示调用父类或者本类的构造器,切父类中又没有无参的构造器,则编译出错
  • 相关阅读:
    10. Regular Expression Matching
    Leetcode:9. Palindrome Number
    MySQL
    MyBatis Plus 自动类型转换之TypeHandler
    深拷贝和浅拷贝
    【强制】不要在程序中写死一年为 365 天,避免在公历闰年时出现日期转换错误或程序逻辑 错误。
    【强制】日期格式化时,传入 pattern 中表示年份统一使用小写的 y。
    【推荐】循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。
    【强制】POJO如果继承了另一个 POJO 类,注意在前面加一下 super.toString。
    【强制】禁止使用构造方法 BigDecimal(double)的方式把 double 值转化为 BigDecimal 对象。
  • 原文地址:https://www.cnblogs.com/zhahu/p/11931391.html
Copyright © 2020-2023  润新知