• java 中子类调用父类方法,父类中this是怎么调用的,终于清楚了!!!!


    1. parent父类与child子类

    public class parent {
        public void add(){
            System.out.println("A add...");
        }
    
        public void addAll(){
            System.out.println("A add ALL...");
            this.add();-----------------------------------------这里调用的是子类
    
            this.hello();---------------------------------------这里调用的是父类
            System.out.println(this.getClass());
        }
        public void hello(){
            System.out.println("hello");
        }
    
    }
    public class child extends parent{
    
        @Override
        public void add() {
            // TODO Auto-generated method stub
            System.out.println("B add...");
            super.add();
        }
    
        @Override
        public void addAll() {
            // TODO Auto-generated method stub
            System.out.println("B add ALL...");
            super.addAll();
        }
    
    }

    2. main方法

    public class main {
        public static void main(String[] args) {
            child c = new child();---------------------------这里实例化的是子类
            c.addAll();
        }
    }

    先说一下流程:首先实例化的是子类,自始自终都没有实例化父类对象,this的简单理解就是当前对象的引用。然后它调用了子类的addAll()------>通过super关键字调用父类的addAll(),然后重点来了父类中的this .add()这里打印出来的this不应该是父类对象,因为子类中重写了父类的方法尽管父类的方法并没有失效,但是this会优先因为重写去子类中寻找add()方法(如果一开始实例化的是父类对象,那么this.add就会自然的调用自身父类的add,这很好理解),第二句this.hello(),因为子类中不存在hello()重写,也就会到父类自身中去寻找hello()方法。---------总之this关键字会优先根据实例化的对象去寻找该对象的方法,父类使用this调用取决于子类中是否有同样的重写方法(覆盖了)。如果没有就会调用自身的方法。!!!!!

  • 相关阅读:
    西门子1200/1500 PLC FC/FB块的区别
    Monaco Editor --Web编辑器 自定义主题、代码提示等
    C# 强制GC垃圾回收
    C# 注册表操作类(查询、修改、删除)
    WinForm重绘Combobox控件无边框样式
    Http-server搭建本地服务
    C# 压缩解压文件夹
    递归获取当前节点和所有父节点
    递归获取当前父节点下的所有子集
    轻量级的通信引擎 StriveEngine
  • 原文地址:https://www.cnblogs.com/cybg/p/14661486.html
Copyright © 2020-2023  润新知