理解Java中this关键字作用 |||| Java中的静态绑定与动态绑定 |||| 子类继承父类的变量域

本文深入探讨Java中的继承与多态概念,通过具体代码示例解析子类如何继承父类的属性和方法,以及this关键字和super关键字的使用。同时,文章详细解释了静态绑定与动态绑定的区别,帮助读者理解Java中的方法调用机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.参考代码

public class class_train
{
    public static void main(String[] args) {
        // System.out.println(name)
        Employee[] staffs = new Employee[2];
        Manager boss = new Manager("ljy", 2000,3000);
        staffs[0] = boss;
        staffs[1] = new Employee("yfc", 1200);
        System.out.println(staffs[1].nextID);
        System.out.println(staffs[0].getClass());
        System.out.println(staffs[1].getClass()); 
        System.out.println(staffs[0].getsalary());
        System.out.println(staffs[1].getsalary());
    }
}

class Employee
{
    public int nextID = 1;
    private String name;
    private int salary;
    public Employee(String name, int salary)
    {
        this("Employee ID#", name, salary);
        nextID++;
    }
    public Employee(String ID, String name, int salary)
    {
        System.out.println("second Constructor");
        this.nextID++;
        this.name = name;
        this.salary = salary;
    }
    public int getsalary()
    {
        return this.salary;
    }
}

class Manager extends Employee
{
    private int honor;
    public Manager(String name, int salary, int honor){
        super(name, salary);
        this.honor = honor;
    }
    public int getsalary()
    {
        return super.getsalary() + this.honor;
    }
}

//这段代码输出
second Constructor
second Constructor
3
class Manager
class Employee
5000
1200

2.this关键字的作用

this关键字有两个作用

  1. 调用自身类的公开的方法和属性。
  2. 调用自身的其他构造方法
    参考代码中的构造器就使用this调用了另外一个构造器(注意构造构造器的时候签名要严格一致)
    以及调用对象中其它方法。

3.Java中的静态绑定与动态绑定

静态绑定和动态绑定表示编译器(JVM)对不同方法的调用方式。

  1. 静态绑定
    如果是使用private ,final ,static 创建的方法,编译器可以直接知道应该调用什么方法
  2. 动态绑定
    如果不是之前说的三种方式创建的方法,那么虚拟机一定会调用我们所引用的对象中最合适哪一个类方法。包括会在父类中搜索。但是事实上如果真的是在其中进行搜索,所需要的时间开销会很大,所以JVM会创建一个包含所有方法的方法表,所以需要找到调用方法的时候只要在方法表中找到最合适的方法就可以了。

4.子类继承父类的变量域

在上述代码中我们创建了一个Manager类继承了Employee类,同时我们在创建Manager的构造方法的时候调用的Employee类的构造方法。可以从输出看出确实是创建子类的时候确实是调用了父类的构造方法。我们使用super关键字将参数传给父类构造器,注意super需要写在子类构造器的第一行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值