美文网首页
java中的this

java中的this

作者: lambdan | 来源:发表于2019-01-08 22:44 被阅读0次

** 父类子类中的this指的是什么? **
** 多态本质是什么? **

class Base{
    int a = 1;
    public void f(){
        System.out.println(this.a); //此处a为父类1
        System.out.println(this.p()); //此处调用子类覆写方法; 多态特性1
        System.out.println(this); 
    }
    public String p(){
        return "this is Base Object";
    }
}

public class Test extends Base {
    int a = 2;
    public String p(){
        System.out.println(this);
        return "this is test";
    }

    public static void main(String[] args) {
        Test t = new Test();
        t.f();
        t.a;
        Base b = new Test();  //多态特性2
        b.f()
    
    }
}

父类和子类中this是同一个对象么?从结果看 两处打印this的是同一个字符串,但是这都是调用的toString()方法,两个this调用的是同个方法生成的,返回结果肯定是同一个字符串,并不能说名父类子类this一定是同一个对象。

new创建对象时候,会在内存里开辟出父类对象和子类对象中的属性,方法所用的空间。父类子类中的this指向的也是各自的对象,new后生成的对象也是指向子类对象。

java中的属性和方法有个特性,当对象处于子类时候,要使用属性或者方法,会先在子类对象中搜索,搜索不到在在父类中搜索。比如代码中t.a 如果Test中没有则会在Base中搜索。方法也是 因为t中没有f方法所以直接调用Base对象中的f。

当对象处于父类对象时候,调用其方法,会先从子类中搜所,子类中没有则会在父类中搜所,但是前提是父类中一定要有该方法,子类对象中如果也有该方法(方法重写),则会执行子类对象方法,这个现象也叫多态。至于父类对象中的属性则没有该规律,属性只能属于该父类,或者父类的父类,不可能是子类对象的属性。该代码中this.p就是调用的子类对象方法而不是父类对象中的方法,要是把父类中的p注释掉,则编辑器会报错。另外在代码中多态特性2的代码 则是经常看见的多态表现方式

结论:
1 属性和方法,从 ‘当前层’ 向上查找 最先找到先使用(大部分语言继承都这样)
2 方法 在'当前层' 或‘上层’具有该方法,同时具有‘底层’, 从‘底层’查找,使用‘底层‘方法 (多态)

Base{
public void f(){}  //1
}
Sub1 extends Base{

}
Sub2 extends Sub1{
public void f(){} //2
}

Sub1 s2 = new Sub2()s2.f 会执行2处方法 规律2 多态
Sub1 s1 = new Sub1() s1.f 会执行1处方法 规律1

相关文章

  • 【Java】Java中的==

    Java中的== Java中的==表示的是什么呢?有时候很令人费解。比如,以下例子输出是什么? 其中,TestOb...

  • 复习Java基础资料

    Java中面向字符的输入流 Java中的static关键字解析 Java中的main()方法详解 Java中普通代...

  • Java内存泄漏

    Java中的内存管理 要了解Java中的内存泄漏,首先就得知道Java中的内存是如何管理的。 在Java程序中,我...

  • 说说Java内存泄漏

    Java中的内存管理 要了解Java中的内存泄漏,首先就得知道Java中的内存是如何管理的。 在Java程序中,我...

  • №1:Java中的字符串

    1.Java中的StringBuilder类 Java中的StringBuilder用来干什么吃的? 在Java中...

  • Java面试题之JavaSE高级

    一、Java中的反射 1.说说你对Java中反射的理解 java中的反射首先是能够获取到Java...

  • 【JAVA】Java中的继承

    0x01 子类可以使用父类的哪些成员 父类的public,子类可以继承 protected也可以继承,不同包也能继...

  • 【JAVA】Java中的抽象

    0x01 抽象方法 特点 没有方法体 抽象方法必须定义在抽象类或接口 不能是私有的,不能使用final,不能使用s...

  • 【JAVA】Java中的多态

    0x01 多态 一个类对象有各种形态,比如狗是狗类,也是动物类,一个表示当前类,一个表示其父类 0x02 多态的特...

  • 【JAVA】Java中的接口

    0x01 接口 在Java中,接口表示一种规范,要求实现者必须遵循这个规范,用来约束使用者该怎么做 必须要求实现者...

网友评论

      本文标题:java中的this

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