this与super关键字



/*
       就近原则: 在类当中,如果存在同名的变量名,Java编译器会认为最近的变量名是该语句操作的变量;所以就出现了this
 *
 * this 关键字的作用:
 * 1..如果在同一个函数中,出现了和成员变量同名的变量名,可以利用this来区分不同的变量;this.成员变量   表示的是成员变量
 *
 * 2..this关键字不仅可以调用普通函数,还能调用类的构造函数
 *   注意事项:1.如果一个构造函数A通过this调用构造函数B,那么this必须放在构造函数的第一行
 *                     2.两个构造函数不能this关键字相互调用,语法不通过,会陷入死循环

    3.只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this

   4.为什么在静态方法中不能使用this关键字
         因为this关键字是指的类对象;而静态方法是属于类的,static随着类的加载而加载,先于对象的创建而创建

    5.在构造方法中,意思是调用本类中另一种形式的构造函数(this必须放在第一行)
 */
class Bus {
 private int wheel;
 private String name;

 public Bus() {
  this(6);//this关键字还能调用类的构造函数,但必须放在第一行
  this.run();//注意:这个是调用的普通的函数; 
  System.out.println("无参构造函数");
 }
 public Bus(int wheel) {
  //this();//陷入死循环
  this.wheel = wheel;
 }

 public Bus(int wheel, String name) {
  //wheel=wheel;//,如果存在同名的变量名,Java编译器会认为最近的变量名是该语句操作的变量
  this.wheel = wheel;
  this.name = name;
 }
 
 public void run(){
  System.out.println("车跑了");
 }
 public void show() {
  System.out.println("Name:"+name+"wheel:"+wheel);
 }

}

public class TestThis {
 public static void main(String[] args) {
  Bus bus = new Bus();
  bus.show();
 }

}

* 子类在创建的时候,会自动调用父类对应的构造函数
 * 但是父类的构造函数又不能被子类继承
 * 【问题】
   创建子类的时候,希望通过子类来初始化从父类继承过来的属性,但是又不能直接调用父类的构造函数
   用this关键字不合适,因为这是父类的属性,用父类的构造函数更加合适
 * 【原因】
 *     在父类的构造函数中,可能存在对于初始化操作的一个限制和约束,这个限制和约束是为了保证代码的业务逻辑符合生活要求,
 *     但是如果在子类中直接使用this来赋值继承而来的父类的属性,没有通过判断和约束,可能会导致代码的业务逻辑出现问题

 *    
 *     super关键字  调用父类方法   super只能指代直接父类
 *     1.super关键字可以调用父类的构造函数和成员方法,也可调用变量名和对象名

           super.xxx;      //xxx为变量名或对象名

           super.xxx();    //xxx为方法名

           super();    调用父类的初始化方法
 *        如果调用构造函数,必须放在当前代码块的第一行
 *     2.如果在代码中,没有显示调用父类的构造函数,那么Java编译器会在代码的编译阶段,自动帮你补
 *       上一个符合条件的父类构造函数(隐式调用)
 *      
 *     3.如果在子类中需要对父类的属性,进行初始化操作,那么只能通过super
 *       关键字来调用父类的构造函数,不能在子类的构造函数中直接使用this赋值
 *     4.super和this不能在同一个构造函数中去调用其他构造函数,因为super和this关键字在构造函数中都必须在第一行

       5.类方法中不能有super


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值