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 */
本文来自博客园,作者:hjzqyx,转载请注明原文链接:https://www.cnblogs.com/hujunzheng/p/3963487.html