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---------
    }
  • 相关阅读:
    FTPClient使用中的问题--获取当前工作目录为null
    MGR安装
    脚本在Shell可以执行成功,放到crontab里执行失败
    使用Python通过SMTP发送邮件
    MySQL Router
    事务管理(ACID)
    mysqldump使用
    MySQL InnoDB Cluster
    Linux LVM逻辑卷配置过程详解(创建、扩展、缩减、删除、卸载、快照创建)
    centos命令行控制电脑发出滴滴声
  • 原文地址:https://www.cnblogs.com/Deng1185246160/p/4229677.html
Copyright © 2011-2022 走看看