zoukankan      html  css  js  c++  java
  • 第十二节(方法的覆盖)

    方法的覆盖(Override)的条件:
    
    � 必须要有继承关系
    
    � 覆盖只能出现在子类中,如果没有继承关系,不存在覆盖,只存在重载
    
    � 在子类中被覆盖的方法, 必须和父类中的方法完全一样, 也就是方法名, 返回类型、参数列表,完全一样
    
    � 子类方法的访问权限不能小于父类方法的访问权限
    
    � 子类方法不能抛出比父类方法更多的异常,但可以抛出父类方法异常的子异常
    
    � 父类的静态方法不能被子类覆盖
    
    � 父类的私有方法不能覆盖
    
    � 覆盖是针对成员方法,而非属性
    
    
    
    为什么需要覆盖?
    就是要改变父类的行为


    方法覆盖 两种形式:

    对成员方法覆盖

    对静态方法覆盖

    
    
    /*
        关于方法的覆盖:
        
            1. 什么时候方法需要进行重写?
                如果父类中的方法已经无法满足 当前子类的业务需求,需要将父类中的方法重写一遍
            
            2. 子类如果重写父类的方法之后,子类的对象一定要调用 重写之后的方法
            
            3. 发生方法的覆盖的条件:
            
                第一:发生在具有继承关系的两个类之间
                第二:必须具有相同的方法名,相同的返回值类型,相同的参数列表
                第三:重写的方法不能比被重写得方法拥有更底的访问权限;
                
                第四:重写的方法不能比被重写的方法抛出的更宽泛的异常(异常机制)
                第五:私有方法是不能被覆盖(多态)
                第六:构造方法无法被覆盖,因为构造方法无法被继承的
                第七:静态的方法不存在覆盖(多态)
                第八:覆盖指的是成员方法,和成员变量无关。
                
            4. 继承最基本的作用: 
                
                    代用重用
                    继承最重要的作用:方法可以重写
        
            
            new谁就调谁
    
    
    */
    //对成员方法覆盖
    public class Test01{
            
        public static void main(String[] args){
                
            //  创建子类对象
            Cat c = new Cat();
            
            // 调用方法
            c.move();
            
            Animal a = new Animal();
            a.move();
            
                
        }
        
    
    }
    
    
    // 父类:动物
    class Animal{
        
        // 成员方法
        public void move(){
            System.out.println("小动物在移动 !");    
        }
        
    }
    
    // 子类:猫
    class Cat extends Animal{
        
        // Cat的move方法 应该输出:小猫走起,还跳起来了!
        // Animal中的move方法 已经无法满足Cat了
        // 所以在Cat类中对Animal类中的move方法进行 重新定义(就是方法的覆盖,方法的重写 Overwrite,Override)
        public void move(){
            System.out.println("小猫走起,还跳起来了!");
        }

    //输出为:小猫走起,还跳起来了!

     //       小动物在移动 !

    }
    
    
    
    
    
    /*
        对静态方法的覆盖
        
        1. 声明的是哪一个类就调用的是哪一个类的静态方法和子类 是没有关系的
        
    */
    public class OverrideStaticTest01{
        
        public static void main(String[] args){
            
                
                Person person_student = new Student();
                
                person_student.setName("ming");
                person_student.setSex(true);
                person_student.setAge(18);
                
                print(person_student);
        }
        
        private static void print(Person p){
            p.printInfo();
        }
        
    
    }
    
    
    class Person{
        
        // 姓名
        private String name;
        // 性别
        private boolean sex;
        // 年龄
        private int age;
        
        
        // 静态方法
        public static void printInfo(){
            
            System.out.println("---------Person---------");
                
        }
        
        
        public void setName(String name){
            this.name = name;    
        }
        public String getName(){
            return name;
        }
        
        public void setSex(boolean sex){
            this.sex = sex;    
        }
        public boolean getSex(){
            return sex;
        }
        
        
        public void setAge(int age){
            this.age = age;    
        }
        public int getAge(){
            return age;
        }
    
    }
    
    class Student extends Person{
    
        // 学号
        private int id;
        
        // 班级编号
        private int classId;
        
        
        
        // 静态方法
        public static void printInfo(){
            
            System.out.println("---------Student---------");
                
        }    
        
        
        
        public void setId(int id){
            this.id = id;    
        }
        public int getId(){
            return id;
        }    
    //输出为:--------Person---------
    }
  • 相关阅读:
    将vue文件script代码抽取到单独的js文件
    git pull 提示错误:Your local changes to the following files would be overwritten by merge
    vue和uniapp 配置项目基础路径
    XAMPP Access forbidden! Access to the requested directory is only available from the local network.
    postman与newman集成
    postman生成代码段
    Curl命令
    POST方法的Content-type类型
    Selenium Grid 并行的Web测试
    pytorch转ONNX以及TnesorRT的坑
  • 原文地址:https://www.cnblogs.com/Deng1185246160/p/4229677.html
Copyright © 2011-2022 走看看