zoukankan      html  css  js  c++  java
  • 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();
    
        }
    
    }
  • 相关阅读:
    myeclipse的git插件安装
    安装虚拟机和Linux系统
    Windows 10快速在指定目录打开命令行
    更新Maven的本地库
    Maven安装
    html全屏显示
    除法保留两位小数
    springmvcjson中文乱码处理
    office2016 下载直通车
    JAVA面向对象编程深入理解图
  • 原文地址:https://www.cnblogs.com/kuillldan/p/5905618.html
Copyright © 2011-2022 走看看