◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
this关键字的用法探讨
在讨论this关键字的用法之前,我们先来了解一个与之相关的概念:向上转型。
向上转型是指父类对象可以赋值给子类对象的过程,而this关键字不会受到此操作的影响。为了更清楚地理解这一点,让我们来看一个例子:
java
public class A { public int i = 10; void print() { System.out.println("我是A中的函数"); } } class B extends A { public int i = 20; void print() { System.out.println("我是B中的函数,我重写了A中的同名函数"); } void speak() { System.out.println("向上转型时我会丢失"); } } public static void main(String[] args) { B b = new B(); A a = b; // 此处向上转型 b.print(); System.out.println(b.i); b.speak(); a.print(); System.out.println(a.i); ((B) a).speak(); // a在创建时虽然丢失了speak方法但是向下转型又找回了 }
在这个例子中,b对象b被向上转型为a对象a。此时,a对象拥有b对象的所有 public成员,包括重写了print()方法的同名方法。然而,a对象不拥有b对象特有的方法speak()。
当我们调用a.print()时,实际上调用的是a类的print()方法,因为a是a的对象。同样地,当我们调用a.i时,实际上访问的是a类的i属性,因为a是a的对象。
需要注意的是,即使a对象在创建时丢失了speak()方法,我们仍然可以通过向下转型将其取回。示例中的((b) a).speak()调用表明,我们可以使用向下转型将a对象转换为b对象,从而访问b对象特有的成员。
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。