JAVA基础----super、this理解

super关键字的用法有三种:
1. 在子类的成员方法中,访问父类的成员变量。
2. 在子类的成员方法中,访问父类的成员方法。
3. 在子类的构造方法中,访问父类的构造方法。

注:子类构造方法没有显示地调用父类的构造方法,那么编译器会自动为它加上一个默认的super()方法调用。如果父类由没有默认的无参构造方法,编译器就会报错,super()语句必须是构造方法的第一个子句。

public class Demo02Fu {
    int num = 20;
    public  Demo02Fu(){
        System.out.println("执行父类无参构造器");
    }
    public Demo02Fu(int num){
        System.out.println("执行父类有参构造器");
    }
    public void nomalmethod(){
        System.out.println("父类成员方法");
    }
}


public class Demo02Zi extends Demo02Fu {
    int num = 30;

    public Demo02Zi(){
        super();//调用父类无参构造器
        System.out.println("子类无参构造器");
    }
   public Demo02Zi(int num){
        super(20); //调用父类有参构造器
        System.out.println("子类有参构造器");
    }
    public void nomalmethod(){
        super.nomalmethod();
        System.out.println("子类普通方法");
        System.out.println(super.num);
    }

}


public class Demo02Extends {
    public static void main(String[] args) {
        Demo02Zi z = new Demo02Zi(); //这里创建对象会使用构造器进行初试化,这里创建的是子类 
                                     //对象,调用子类无参构造方法。但是无参构造方法第一行默 
                                     //认带有super(),就去调用父类构造方法;
        z.nomalmethod();
        Demo02Zi zi = new Demo02Zi(4);//创建子类对象,构造器带有参数。其余的同上
    }
}



执行父类无参构造器
子类无参构造器
父类成员方法
子类普通方法
20
执行父类有参构造器
子类有参构造器

this的用法:

1. 在本类的成员方法中,访问本类的成员变量。(this.属性名称   表示访问类中的成员变量,用来区分成员变量和局部变量

在封装中的this.name = name 中的意思就是将方法传递过来的参数(局部变量)name赋值给类中的成员变量name)

2. 在本类的成员方法中,访问本类的另一个成员方法。(this.方法名称   表示访问本类的成员方法)
3. 在本类的构造方法中,访问本类的另一个构造方法。  跳转到这里去

package cn.lpp.yj;

public class Demo05This {
    private String name = "Gallagher";
    private int age = 24;
    //System.out.println(Demo05This.name);//这里的sout中的out是静态方法哦!


    public static void main(String[] args) {
        String name = "lpp";
        System.out.println(name);//当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量。输出刘佩佩
        /*this.name = "范冰冰"; //这里也是错的,因为你现在在一个静态方法中,静态方法不能调用非静态方法中的成员。除非自己创建对象
        使用对象名来调用*/

        int age = 25;
        System.out.println(new Demo05This().age);//这里使用对象调用静态方法中的成员变量;输出24
        new Demo05This().run();
    }

    public void run() {
        String name = "jack马";
        System.out.println(name);//这里还是jack马,如上就近原则
        System.out.println(this.name);//这里就输出GAllagher了;
    }
}
package cn.lpp.yj;
/* 例:this关键字的作用:让类中的一个方法访问该类的另一个方法或者实例变量;----> Dog类
但是在这个例子中是在run方法中创建一个对象然后去调用jump方法。因为没用static修饰的方法要用对象来调用;
下一步我们直接创建一个Dogtest类,在这个类中直接创建对象,然后调用这个方法;*/
public class Dog {
    public void jump(){
        System.out.println("执行jump方法");
    }
    public void run(){
        Dog d = new Dog();
        //这里就是tong
        d.jump();
        System.out.println("执行run方法");
    }

/*看这段话:问题一:在run()方法中调用jump方法,是否一定需要创建一个Dog对象;问题二:是否需要在run方法中重新创建一个Dog对象;
解答:问题一:在这里肯定是需要创建一个Dog对象的,因为jump方法不是static修饰,调用该方法肯定是要用对象去调用;
      问题二:这里是不需要的,因为这里再调用run()方法的时候肯定会使用对象来调用,这里的对象就是Dog对象,所以这里已经存在了一个对象
                ,这样调用jump()方法时就可以使用这个已经存在的对象。这样就可以使用this------>表示调用这个方法的对象;*/
    //这样就可以使用下面的方法了:
   /* public void run(){
        this.jump();
        System.out.println("直接通过this来调用方法");
    }*/


}
/*生活中一个方法依赖另一个方法是比较常见的:
比如吃饭方法依赖拿筷子方法,写代码方法依赖敲键盘的方法。这些个方法中调用他们的对象都是一个,都是我这个对象;
这样对象中一个成员直接调用另一个成员就可以使用this,也可以省略this直接调用;
引申:在类中的static修饰的成员(方法或者变量)也可以省略前面的类名。类似与不用static修饰的非静态成员而用到的this*/

如有不足的,请一定指出。感恩!!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值