第十二节(方法的覆盖)

方法的覆盖(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---------
}

 

posted @ 2015-01-16 20:03  哥的笑百度不到  阅读(254)  评论(0编辑  收藏  举报