#05.Java SE中:this和super关键字的使用介绍以及注意事项

this和super关键字的介绍

  • this:存储的“当前对象”的引用;
    • this可以访问:本类的成员属性、成员方法、构造方法;
  • super:存储的“父类对象”的引用;
    • super可以访问:父类的成员属性、成员方法、构造方法;

this关键字的三种用法

  • this访问本类成员变量: this.成员变量

    public class Student{
          
          
        String name = "张三";
        public void show(){
          
          
            String name = "李四";
            System.out.println("name = " + name);// 李四
            System.out.println("name = " + this.name);// 张三
        }
    }
    
  • this访问本类成员方法: this.成员方法名();

    public class Student{
          
          
        public void show(){
          
          
            System.out.println("show方法...");
            this.eat();
        }
        public void eat(){
          
          
            System.out.println("eat方法...");
        }
    }
    
  • this访问本类构造方法: this()可以在本类的一个构造方法中,调用另一个构造方法

    public class Student{
          
          
        public Student(){
          
          
            System.out.println("空参构造方法...");
        }
    
        public Student(String name) {
          
          
            this();//当使用this()调用另一个构造方法时,此代码必须是此构造方法的第一句有效代码。
            System.out.println("有参构造方法...");
        }
    }
    public class Demo {
          
          
        public static void main(String[] args) {
          
          
            Student stu2 = new Student();
        }
    }
    

super关键字的三种用法

  • 1.super访问父类的成员变量: super.父类成员变量名

    public class Fu{
          
          
        int money = 100;
    }
    public class Zi extends Fu{
          
          
        int money = 10;
        public void show(){
          
          
            int monet = 1;
            System.out.println(“money :+ money);//1
            System.out.println(this.money :+ this.money);//10
            System.out.println(super.money:” + super.money);//100  直接去父类中找
        }
    }
    
  • 2.super访问父类的成员方法: super.成员方法名();

    public class Fu{
          
          
        public void show(){
          
          
            System.out.println("父类的show方法...");
        }
    }
    public class Zi extends Fu{
          
          
       public void show(){
          
          
            super.show();
            System.out.println("子类的show方法...");
        }
    }
    public class Demo {
          
          
        public static void main(String[] args) {
          
          
           Zi zi = new Zi();
           zi.show();
        }
    }
    
  • 3.super访问父类的构造方法: super()

    public class Fu{
          
          
        public Fu(){
          
          
            System.out.println("Fu 类的空参构造方法..");
        }
        public Fu(String name, int age) {
          
          
            System.out.println("Fu 类的有参构造方法..");
        }
    }
    public class Zi extends Fu{
          
          
        public Zi(){
          
          
            super();// 调用父类的空参构造方法
            System.out.println("Zi 类的空参构造方法..");
        }
        public Zi(String name,int age){
          
          
            super(name,age);// 调用父类的有参构造方法
             System.out.println("Zi 类的有参构造方法..");
        }
    }
    public class Demo {
          
          
        public static void main(String[] args) {
          
          
            Zi zi = new Zi();
            System.out.println("----------------------");
            Zi z2 = new Zi("刘德华", 17);
        }
    }
    
    

super关键字的注意事项

super的注意事项一

  • super访问成员变量和成员方法: 优先去父类中找,如果有就直接使用,如果没有就去爷爷类中找,如果有,就用,依次类推…

    class Ye{
          
          
        int a = 10;
        public void eat(){
          
          
            System.out.println("Ye");
        }
    }
    class Fu extends Ye{
          
          
        int a = 20;
        public void eat(){
          
          
            System.out.println("Fu");
        }
    }
     class Zi extends Fu{
          
          
       int a = 30;
       public void show(){
          
          
           System.out.println(super.a);
           super.eat();
       }
    }
    public class Test2 {
          
          
        public static void main(String[] args) {
          
          
           Zi zi = new Zi();
           zi.show();
        }
    }
    
    

super的注意事项二

  • 子类的构造方法默认会调用父类的空参构造方法,如果父类中的没有空参构造方法,只定义了有参构造方法,会编译报错

    class Fu {
          
          
        public Fu(int a){
          
          
    
        }
    }
     class Zi extends Fu{
          
          // 编译报错
      
    }
    
    

猜你喜欢

转载自blog.csdn.net/qq_42522848/article/details/107515114
今日推荐