当前位置 博文首页 > m0_48462648的博客:Java中继承方法的使用,以及使用方法的注意

    m0_48462648的博客:Java中继承方法的使用,以及使用方法的注意

    作者:[db:作者] 时间:2021-08-02 09:51

    如今能给我安全感的,却只有出门时口袋里的钱包和钥匙,以及手机里显示的满格电

    在这里插入图片描述
    首先创建父类子类测试类:

    //父类
    public class Fu {
    }
    
    
    
    //子类
    public class Zi {
    }
    
    //测试类
    public class TestA {
    }
    

    子类继承父类:

    //子类
    public class Zi extends Fu{
    }
    
    

    随后我们在父类中添加非静态方法aa:

    public class Fu {
        public  void aa(){
            System.out.println("我是父类中的aa方法");
        }
    }
    

    之后我们通过在测试类new子类对象,对父类的aa方法进行调用

    //测试类
    public class TestA {
        public static void main(String[] args) {
            Zi zi = new Zi();
            zi.aa();
        }
    }
    

    这里的话说明一下,我刚接触这个的时候,就有一个疑问,静态方法不是不能直接调用非静态方法吗?这里的直接调用,是类名.方法名调用,用对象new的话,不属于直接调用;

    在这里插入图片描述那我们整体输出一下:
    在这里插入图片描述
    通过上面的示例我们发现,我们调取父类中的方法,与属性调用方法是一致,那么我们如何调用子类中的方法呢?我们在子类中创建非静态方法,bb

    //子类
    public class Zi extends Fu{
        public void bb(){
            System.out.println("我是子类中的方法bb");
        }
    }
    

    我们测试类调用运行:
    在这里插入图片描述
    在这里插入图片描述

    其实这种普通方法的调用,跟调用属性是一样的,那普通方法是这样的,那静态方法是怎么调取的?

    我们在父类种添加静态方法aaa
    在子类方法中添加静态方法bbb

    //父类
    public class Fu {
        public  void aa(){
            System.out.println("我是父类中的aa方法");
        }
        //静态方法
        public static void aaa(){
            System.out.println("我是父类中的静态aaa方法");
        }
        
    }
    
    //子类
    public class Zi extends Fu{
        public void bb(){
            System.out.println("我是子类中的方法bb");
        }
        //静态方法
    
        public static void bbb(){
            System.out.println("我是子类中的静态方法bbb");
        }
    }
    

    随后我们在测试类进行调用两个静态方法
    但是在测试类调用静态方法的同时,我们需要注意,系统不会提供相应的快捷输入方式,但我们直接手写全名即可,不会出现报错
    在这里插入图片描述在这里插入图片描述现在我们运行测试类,看看会输出什么?
    在这里插入图片描述这里我们要注意一点,我们这个是创建好的对象,然后才调用的,但其实我们的静态方法和普通方法是有运行的优先级的,这个推荐一篇文章,他写的不错:
    静态方法的优先级
    其实关于静态优先级也很好理解,我们的Java虚拟机是有栈堆内存的,创建变量一共分为四个步骤,其中牵扯的东西比较多,如果你不想一直做码农的话,我建议就学习一下,了解这里面的内存分布的情况;

    我们属性内有重名的情况。那么我们的办法肯定也有重名的情况,这种子类与父类的方法的重名,我们叫做方法的重写,意思是什么,就是父类的方法已经无法满足我们的需求,但是我还有用之前父类中其他方法的功能,但我还需要添加新功能,这怎么办呢,用重写

    我i们在父类子类中添加cc方法:

    public void cc(){
            System.out.println("我是父类中的cc方法");
        }
    
    public class Zi extends Fu{
        public void bb(){
            System.out.println("我是子类中的方法bb");
        }
        //静态方法
    
        public static void bbb(){
            System.out.println("我是子类中的静态方法bbb");
        }
    
        //重写
        public void cc(){
            System.out.println("我是子类中的cc重写方法");
        }
    }
    

    我们可以在子类重写方法上面写@Override,如果没有报错,就代表这个方法被重写了

    在这里插入图片描述运行结果:
    在这里插入图片描述这就代表我们父类的cc方法被子类的cc方法重写了
    那我们再说,其实重写的话也是有很多要求的:

    • 方法名必须相同
    • 参数列表必须相同
    • 子类返回值类型小于等于父类中的返回值类型
    • 子类权限修饰符的权限必须要大于等于父类权限修饰符
    • 可以使用@Override,检测方法是否重写
    • 静态方法不能被重写

    来一张图片,净化心灵
    在这里插入图片描述
    在这里插入图片描述

    cs