JAVA中this关键字的用法以及两个举例

JAVA中this关键字的用法以及举例

this 关键字在 Java 中主要用于以下几种情况:

1.引用当前对象的成员变量: 当成员变量与方法参数或局部变量同名时,使用 this 可以明确指示使用的是成员变量。

public class MyClass {
    private int num;

    public MyClass(int num) {
        // 使用this关键字区分成员变量和构造方法参数
        this.num = num;
    }
}

2.调用当前对象的其他构造方法: 当一个构造方法需要调用同一个类中的另一个构造方法时,可以使用 this() 方法。

public class MyClass {
    private int num;

    public MyClass() {
        this(0); // 调用另一个构造方法
    }

    public MyClass(int num) {
        this.num = num;
    }
}

3.返回当前对象的引用: 当一个方法需要返回当前对象的引用时,可以使用 return this。

public class MyClass {
    private int num;

    public MyClass setNum(int num) {
        this.num = num;
        return this; // 返回当前对象的引用
    }
}

4.在匿名内部类中引用外部类的实例: 当在匿名内部类中需要引用外部类的实例时,可以使用 外部类名.this。

public class Outer {
    private int value;

    public void doSomething() {
        // 匿名内部类中引用外部类的实例
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("Value from outer class: " + Outer.this.value);
            }
        };
    }
}

5.在链式调用中返回当前对象: 当一个方法需要支持链式调用时,可以在方法中返回 this。

public class MyClass {
    private int num;

    public MyClass setNum(int num) {
        this.num = num;
        return this; // 支持链式调用
    }
}

这些是 this 关键字的常见用法,它们能够提高代码的可读性和清晰度,同时也能够解决一些特定的编程问题。

简单的例子:

假设我们有一个 Person 类,用于表示人的姓名和年龄。在构造方法中,我们接收姓名和年龄作为参数,并将它们赋值给类的成员变量。在 printInfo 方法中,我们打印出这个人的姓名和年龄。假设我们有一个 Person 类,用于表示人的姓名和年龄。在构造方法中,我们接收姓名和年龄作为参数,并将它们赋值给类的成员变量。在 printInfo 方法中,我们打印出这个人的姓名和年龄。

public class Person {
    // 成员变量
    private String name;
    private int age;
    
    // 构造方法
    public Person(String name, int age) {
        // 使用this关键字区分成员变量和局部变量
        this.name = name;
        this.age = age;
    }
    
    // 打印姓名和年龄
    public void printInfo() {
        System.out.println("Name: " + this.name);
        System.out.println("Age: " + this.age);
    }
    
    public static void main(String[] args) {
        // 创建一个Person对象
        Person person = new Person("Alice", 30);
        // 调用printInfo方法
        person.printInfo();
    }
}

在上面的代码中,我们使用了 this 关键字来引用当前对象的成员变量 name 和 age。这样做是为了区分构造方法的参数 name 和 age 与成员变量的 name 和 age。

当我们创建 Person 对象时,我们向构造方法传递了姓名 “Alice” 和年龄 30。在构造方法内部,我们使用 this.name 和 this.age 来访问当前对象的成员变量,并将传递进来的值赋给它们。然后我们调用 printInfo 方法,打印出这个人的姓名和年龄。

这个例子展示了如何使用 this 关键字来引用当前对象的成员变量,以及它的作用是为了区分成员变量和局部变量。
为了方便大家理解我再来写一个复杂一点的例子

复杂的案列

假设我们有一个 Rectangle 类,用于表示矩形的宽度和高度,并且可以计算矩形的面积。我们还有一个 Box 类,表示一个立方体,它扩展自 Rectangle 类,并增加了一个长度属性。在 Box 类中,我们想要使用父类 Rectangle 中的方法来计算底部的矩形的面积,并在 Box 类中添加计算立方体体积的方法。

class Rectangle {
    protected double width;
    protected double height;

    // 构造方法
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    // 计算矩形的面积
    public double calculateArea() {
        return this.width * this.height;
    }
}

class Box extends Rectangle {
    private double length;

    // 构造方法
    public Box(double width, double height, double length) {
        // 调用父类的构造方法
        super(width, height);
        this.length = length;
    }

    // 计算立方体的体积
    public double calculateVolume() {
        // 调用父类的方法来计算底部矩形的面积
        double baseArea = super.calculateArea();
        // 计算立方体的体积
        return baseArea * this.length;
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建一个立方体对象
        Box box = new Box(5, 4, 3);
        // 计算并打印立方体的体积
        System.out.println("Volume of the box: " + box.calculateVolume());
    }
}

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Java,this和super都是关键字,分别表示当前对象和父类对象。它们的使用方法如下: 1. this关键字 this关键字表示当前对象,它可以在类的方法使用。一般用于区分成员变量和局部变量之间的区别,或者在一个方法调用该类的另一个构造方法。 举个例子,假设有以下代码: ``` public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public void printInfo() { System.out.println("Name: " + this.name); System.out.println("Age: " + this.age); } } ``` 在printInfo方法,我们使用了this关键字来表示当前对象,即Person对象。这样就可以访问到该对象的成员变量name和age。 2. super关键字 super关键字表示父类对象,它可以在子类使用。一般用于在子类调用父类的构造方法或者访问父类的成员变量和方法。 举个例子,假设有以下代码: ``` public class Animal { protected String name; public Animal(String name) { this.name = name; } public void eat() { System.out.println("Animal eating..."); } } public class Dog extends Animal { private String breed; public Dog(String name, String breed) { super(name); this.breed = breed; } public void bark() { System.out.println("Dog barking..."); } } ``` 在Dog类的构造方法,我们使用了super关键字来调用父类Animal的构造方法,从而初始化了父类的成员变量name。另外,在Dog类,我们也可以通过super关键字来访问父类Animal的成员方法和成员变量。例如,在bark方法,我们可以这样调用父类的eat方法: ``` public void bark() { super.eat(); System.out.println("Dog barking..."); } ``` 这样就会先调用父类的eat方法,然后再输出Dog barking...。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值