• JAVA继承时this和super关键字


    JAVA继承时thissuper关键字

    本文主要讨论在方法前使用thissuper关键字时,编译器在什么地方查找对应的函数。

    1. 在子类中指定this关键字。首先在本类中查找,如果本类中找不到,再在父类中查找。
    class A
    
    {
    
        public void fun()
    
        {
    
            System.out.println("父类的fun()");
    
        }
    
    }
    
    class B extends A
    
    {
    
        public void test()
    
        {
    
            this.fun();
    
        }
    
        public void fun()
    
        {
    
            System.out.println("子类中的fun()");
    
        }
    
    }
    
    public class Hello
    
    {
    
        public static void main(String[] args) throws Exception
    
        {
    
            B b = new B();
    
            b.test();
    
        }
    
    }

    输出结果是子类中的fun。如果我们将子类中的该函数删去,那么调用的就是父类中的fun

    class A
    
    {
    
        public void fun()
    
        {
    
            System.out.println("父类的fun()");
    
        }
    
    }
    
    class B extends A
    
    {
    
        public void test()
    
        {
    
            this.fun();
    
        }
    
        // public void fun()
    
        // {
    
        // System.out.println("子类中的fun()");
    
        // }
    
    }
    
    public class Hello
    
    {
    
        public static void main(String[] args) throws Exception
    
        {
    
            B b = new B();
    
            b.test();
    
        }
    
    }

    输出父类中的fun

    1. 在子类中使用super,那么跳过子类查找直接从父类中查找
    class A
    
    {
    
        public void fun()
    
        {
    
            System.out.println("父类的fun()");
    
        }
    
    }
    
    class B extends A
    
    {
    
        public void test()
    
        {
    
            super.fun();
    
        }
    
        public void fun()
    
        {
    
            System.out.println("子类中的fun()");
    
        }
    
    }
    
    public class Hello
    
    {
    
        public static void main(String[] args) throws Exception
    
        {
    
            B b = new B();
    
            b.test();
    
        }
    
    }

    输出父类中的fun

    1. 在父类中指定this关键字。和子类中指定this关键字一样,先从子类中找覆写的方法,如果找到,直接调用子类的该方法,如果没找到再从父类中寻找。
    class A
    
    {
    
        public void test()
    
        {
    
            this.fun();
    
        }
    
        public void fun()
    
        {
    
            System.out.println("父类的fun()");
    
        }
    
    }
    
    class B extends A
    
    {
    
        public void fun()
    
        {
    
            System.out.println("子类中的fun()");
    
        }
    
    }
    
    public class Hello
    
    {
    
        public static void main(String[] args) throws Exception
    
        {
    
            B b = new B();
    
            b.test();
    
        }
    
    }

    输出子类中的fun

    如果此时将子类中的fun删除

    class A
    
    {
    
        public void test()
    
        {
    
            this.fun();
    
        }
    
        public void fun()
    
        {
    
            System.out.println("父类的fun()");
    
        }
    
    }
    
    class B extends A
    
    {
    
        // public void fun()
    
        // {
    
        // System.out.println("子类中的fun()");
    
        // }
    
    }
    
    public class Hello
    
    {
    
        public static void main(String[] args) throws Exception
    
        {
    
            B b = new B();
    
            b.test();
    
        }
    
    }

    输出父类中的fun

    但此时有一点需要注意的是,如果修改父类的fun的访问权限为private,这时输出的就是父类中的fun

    class A
    
    {
    
        public void test()
    
        {
    
            this.fun();
    
        }
    
        private void fun()
    
        {
    
            System.out.println("父类的fun()");
    
        }
    
    }
    
    class B extends A
    
    {
    
        public void fun()
    
        {
    
            System.out.println("子类中的fun()");
    
        }
    
    }
    
    public class Hello
    
    {
    
        public static void main(String[] args) throws Exception
    
        {
    
            B b = new B();
    
            b.test();
    
        }
    
    }
  • 相关阅读:
    ORA-27302: failure occurred at: sskgpsemsper
    mysql 慢查询设置
    静默安装ORACLE数据库软件
    启动服务器上的所有oracle数据库
    shell tr 命令详解
    Hive安装
    hadoop2.7.2完全分布式环境搭建
    FastDFS
    aspnet_regiis加密文件提示路径中具有非法字符
    DataGridview绑定复杂对象
  • 原文地址:https://www.cnblogs.com/kuillldan/p/5905618.html
Copyright © 2020-2023  润新知