Java中父类this指针问题
最近在Android项目开发中使用一种写法,就是在BaseActivity中添加如下方法
public String getActivityName() {
return this.getClass().getName();
}
这样在打印日志时加上这个函数可以方便的定位到对应的Activity类,方便排查问题。但是问题来了,this指针怎么指向的不是当前的BaseActivity类而是继承于它的子类呢?
【Java中父类this指针问题】网上查了一下有这么一句精辟的解释
在继承关系中,不管父类还是子类,这些类里面的this都代表了最终new出来的那个类的实例对象,所以在父类中你可以用this获取到子类的信息!再往下细分析,就是引用在栈内存中存在对象的内存地址。真正的对象(通过 new 创建的)存放在堆内存里。在这块堆内存区域内,存在的是子类的属性(包括自己特有的,以及通过super()构造方法中从父类获得的)和方法(继承父类但没有覆盖的,以及覆盖父类的方法和自己特有的),尽管引用是声明为父类的引用,但是它指向的子类的对象,在执行方法的时候,是通过引用指向的堆内存区域内执行的。也就是到底执行父类方法还是子类方法是由对象决定的,跟引用没有直接关系。
举个例子
public class Person{private String name;
public Person(){}public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}public void introduce(){
System.out.println("Hello, I'm a Person object, and my name is "
+getName());
}
}
public class Student extends Person{public Student(){
super();
}public void introduce(){
System.out.println("I'm a Student object and my name is "
+getName());
}
}
public class Test{public static void main(String[] args){
Person p = new Student();
p.setName("Hello");
p.introduce();
}
}
运行结果:I'm a Student object and my name is Hello
转自:http://www.656463.com/java/nI3UZf.htm
推荐阅读
- java运算符(超详细!!!)
- Java开发学习(七)----DI依赖注入之自动装配与集合注入
- java|JAVA中几种常用JSON库性能比较
- python比java的优势_Python or Java (Python比Java有什么优势让大家都追捧它?)
- 为什么说不变模式可以提高性能
- 关于Java线程,你必须掌握的知识点
- 链表设计与Java实现,手写LinkedList这也太清楚了吧!!!
- LeaRun.Java快速开发框架|LeaRun.Java快速开发框架 高效代码自动化生成
- intellij-idea|JetBrains IntelliJ IDEA 2021 for Mac(Java开发工具)
- Java基础之细说枚举