java中子类与父类中隐含的this引用的分析

简介:

/*
    看一下下面的程序,看是否你的答案和运行的答案是否一致!
*/
class Parent{
     
    public int x;
    public Parent p;
     public Parent(){}
     public Parent(int x){
           this.x=x; 
           p=this;
    }
    
     public void f(){
            System.out.println("Parent::f()"); 
     }
        
      public void g(){
            System.out.println("Parent::g()");
     }
    
     public void h(){
            System.out.println("Parent::h()");
            f();
            g();
            y();
            System.out.println("LOOK HERE: " + x);
     }
        
     private void y(){
            System.out.println("Parent::y()");
     }
};

class Child extends Parent{
    public int x;
        
    public Child(){}
    public Child(int x){ 
            super(x+5);
            this.x=x;
    }
    
    public void f(){
            System.out.println("Child f()");
    }
    
    public void g(){
            System.out.println("Child g()"); 
    }
};


public class ThisDemo {

    public static void main(String[] args) {
            Child ch=new Child();
            ch.h();
            System.out.println();
            ch=new Child(5);
            ch.h();
            System.out.println();
            ch.p.h();
    }

}

其实c++this思想和java中的this思想差不多,就是在多态的情况下有一些不同,c++基类中的方法如果没有有virtual修饰,那么派生类的重写该方法时就不是覆盖,不会具有包含多态(c++多态的种类:强制多态、重载多态、类型参数化多态、包含多态(就是通过用virtual))!然而在java中,如果子类中重写了父类的方法,那么就是覆盖,就会产生像c++使用virtual的多态!

c++样例请点击这里:here!
输出结果:
/*
Parent::h()
Child f()
Child g()
Parent::y()
LOOK HERE: 0

Parent::h()
Child f()
Child g()
Parent::y()
LOOK HERE: 10//输出的是父类中的x

Parent::h()
Child f()
Child g()
Parent::y()
LOOK HERE: 10//输出的是父类中的x
*/

目录
相关文章
继承与隐藏:Java中父类成员变量的神秘禁忌
本文将解释为什么Java设计了这样的规则,探讨与此相关的继承和多态的概念,并说明如何在子类中访问和使用父类的成员变量。
|
Java
java 多态屏蔽子类属性【问题】
java 多态屏蔽子类属性【问题】
69 0
|
6月前
|
Java 开发者
解释Java中的接口和超类在多态性中的作用。
解释Java中的接口和超类在多态性中的作用。
82 0
|
6月前
|
Java
java 父类引用指向子类对象
java 父类引用指向子类对象
48 0
|
Java
Java中继承的实现及继承中变量、构造方法、成员方法的访问特点
继承的实现及继承中变量、构造方法、成员方法的访问特点的简单示例
120 0
Java中继承的实现及继承中变量、构造方法、成员方法的访问特点
java50-子类继承会优先调用父类的构造器
java50-子类继承会优先调用父类的构造器
76 0
java50-子类继承会优先调用父类的构造器
|
Java
Java - 子类隐藏成员变量和方法重写的理解
Java - 子类隐藏成员变量和方法重写的理解
210 0
Java - 子类隐藏成员变量和方法重写的理解
|
存储 Java 编译器
java三大特征 重载与重写的区别(一)
java三大特征 重载与重写的区别(一)
131 0
java三大特征 重载与重写的区别(一)
|
Java 编译器
java三大特征 重载与重写的区别(二)
java三大特征 重载与重写的区别(二)
147 0
java三大特征 重载与重写的区别(二)
|
Java
Java - 父类与子类继承调用方法关系
Java - 父类与子类继承调用方法关系
154 0
Java - 父类与子类继承调用方法关系