java中的构造函数、this、this()、super、super()、this动态绑定

1、名词解释

构造函数:和类同名的函数,主要作用是完成对象的初始化工作

1、如果没有写构造函数,编译器会默认添加一个无参构造函数在class文件里。
2、当有多个构造函数时,new对象时填几个参数,就调哪个构造函数,例:new A(”aa“);
3、父类构造函数比子类优先初始化,变量比构造函数优先初始化

this :代表“当前对象”

this():就是调用“当前对象”的无参构造方法
this、this(),new的谁就指向谁。父类里有this也是指向的new出来的对象。

this的动态绑定:包括静态方法和静态成员变量是前期绑定、访问方法是后期绑定

super:指向父类

super():就是调用父类的无参构造方法
super、super(),仅指向上一级父类。

2、简单实例演示

1、不写构造函数,编译器会默认添加一个
在这里插入图片描述
2、当有多个构造函数时,new对象时填几个参数,就调哪个构造函数
在这里插入图片描述
3、父类构造函数比子类 优先初始化
在这里插入图片描述
4、变量比构造函数 优先初始化
在这里插入图片描述
5、this指当前对象
在这里插入图片描述
另外父类A里面不管永不用this,调用s1( )方法都是B里的,因为被覆盖了。
在这里插入图片描述
6、调用方法时this是指向当前对象,但是调用属性时,是指的当前类的属性

这是java程序中易产生二义性之处,
1、this来指明当前对象 (后期绑定:在运行期间绑定方法)
2、如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名(前期绑定:静态方法和静态成员变量是编译期绑定)

如下例,区分有this、没this、父类中调用this的区别:

在这里插入图片描述
把this.方法、this.变量一起使用看看效果
如下例,区分this易产生二义性之处:
在这里插入图片描述
7、this和this( )

this()只能写在构造方法中

在这里插入图片描述
8、super( )

super(…);的调用只能放在构造方法的第一行.
super(…)和this(…)不能共存。

在这里插入图片描述

3、this的后期绑定 实例

有两个类A、B,B继承自A,代码内容如下,判断最后输出的什么
A

public class A {
    private int n;
    public A(int n){
        setN(n);
    }
    
    public int getN() {
        try{
            n++;
            return n;
        }finally {
            this.setN(n);
            System.out.println(n);
        }
    }

    public void setN(int n) {
        this.n = n;
    }
    
}

B

public class B extends A{
    private int n;

    public B() {
        super(5);
        setN(getN() - 3);
    }

    @Override
    public void setN(int n) {
        super.setN( 2*n );
    }

    public static void main(String[] args) {
        System.out.println(new B().getN());
    }
}

答案
在这里插入图片描述
解析
先看看B

在这里插入图片描述
再看看A
在这里插入图片描述
调用图解

运行流程1:new B() --> super(5) --> public A() --> B:setN(5) -->A:setN(25)
在这里插入图片描述
流程1产生结果:A:n = 10
运行流程 2:getN() --> A:getN --> setN(11-3)
在这里插入图片描述
流程2产生结果:setN(8)
运行流程 3:B: setN(8)构造方法里面 --> fially后面 A:setN(2
11)
在这里插入图片描述

流程3产生结果:A:n =22,输出第一个结果22
运行流程 4:setN(11 -3)
在这里插入图片描述
流程4产生结果:A:n =16
运行流程 5:
在这里插入图片描述
流程5运行结果:输出17和34
最终结果
在这里插入图片描述

4、java动态绑定原理

参考:https://www.cnblogs.com/mibloom/p/9613280.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值