美文网首页Java基础
Java中父类this指针问题

Java中父类this指针问题

作者: 乐皮儿 | 来源:发表于2018-06-06 15:55 被阅读0次

最近在Android项目开发中使用一种写法,就是在BaseActivity中添加如下方法

public String getActivityName() {
  return this.getClass().getName();
}

这样在打印日志时加上这个函数可以方便的定位到对应的Activity类,方便排查问题。但是问题来了,this指针怎么指向的不是当前的BaseActivity类而是继承于它的子类呢?

网上查了一下有这么一句精辟的解释

在继承关系中,不管父类还是子类,这些类里面的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中父类this指针问题

    最近在Android项目开发中使用一种写法,就是在BaseActivity中添加如下方法 这样在打印日志时加上这个...

  • Java几个基本概念

    多态:通过父类指针调用子类方法 重载:一个类中方法参数名、个数、类型不同 重写:子类对父类方法的重写 Java泛型...

  • java基础-Object

    Object是java中的顶级父类---也是java中唯一一个没有父类的类. 重要方法 clone()---克隆出...

  • OC,类的三大特性之多态

    1. 多态 父类的指针指向子类的指针 不同的子类相应父类的行为 父类:打印机 #import@interface ...

  • 父类的析构函数为虚函数

    当父类指针指向子类对象的时候,delete父类的指针,如果父类的析构函数不为虚函数,则调用父类的析构函数,子类的对...

  • C++类 继承

    1. 父类指针指向子类对象 虚函数的作用主要是实现了多态的机制。可以用父类的指针指向其子类,然后通过父类的指针调用...

  • iOS开发:什么是多态

    什么是多态:多态就是父类指针指向子类指针。什么意思呢?首先,子类继承父类那么就子类可以调用父类的东西相当于把父类的...

  • 类访问权限

    java中仅有单继承,没有多继承。 java中使用super来调用父类中的指定操作: super可以用于访问父类中...

  • Java代码执行顺序

    java中子类继承父类程序执行顺序问题 Java中,new一个类的对象,类里面的静态代码块、非静态代码、无参构造方...

  • java基础问题

    在多态中,父类指向子类时候,不能调用父类没用,子类有的方法。 java中普通类可以继承普通类的。

网友评论

    本文标题:Java中父类this指针问题

    本文链接:https://www.haomeiwen.com/subject/vqivsftx.html