《Oracle Java SE编程指南》13-06:方法的覆盖和

2020-04-24  本文已影响0人  AT阿宝哥
课程封面-JavaSE-AT阿宝哥

内容导航


1、方法覆盖

继承的作用就是复用,即子类直接使用父类的属性和方法。

然而,有些时候,子类希望修改父类的方法的方法体,可以怎么做呢?

第一种做法是子类创建一个不同名字的新方法,实现新的逻辑,然而,这种做法会导致子类依然包含父类中的那个方法,却不应该使用,破坏封装性。

我们希望子类中的方法依然和父类方法的声明形式一样,但是具体方法体却不同,这种做法就叫做方法覆盖。

2、方法覆盖定义及原则

方法覆盖的定义:子类可以重写父类中某一个方法,称为方法覆盖,也称方法重写,是继承中非常重要的知识点。如果子类需要修改从父类继承到的方法的方法体,就可以使用方法覆盖。

方法覆盖的原则:

示例代码-父类


public class Animal{
     
        String name;
        Integer age;       
         
        public Animal() {
             
        }   
        public Animal(String name, Integer age) {
            this.name = name;
            this.age = age;
        }       
        void run(){
            System.out.println("一只"+this.age+"岁的"+ this.name + "在奔跑!~~");            
        }
        void sound(){
            System.out.println("一只"+this.age+"岁的"+ this.name + "在吼叫!~~");
        }   
}

示例代码-子类:


public class Tiger extends Animal{ 
  
    String color;
     
    public Tiger(String name,Integer age,String color){   
        super(name,age);
   
        this.color = color;
    }
 
    void hunt(){
        System.out.println("一只"+this.color+"的"+ this.name + "在捕猎!~~");
    }
 
    void sound(){
        System.out.print("我是一只老虎~");
        super.sound();
    } 
}


此处可以提使用tigerSound()方法,而不使用方法覆盖的方式,sound()会被tiger类继承,这违反了面向对象的封装性特征。对象封装了属性和方法,对象的属性和方法都是该对象可以使用的。因此,上面的方法虽然实现了新算法,却存在严重漏洞,破坏了对象的封装性。如果子类需要修改自父类继承到的新方法,可以使用“方法覆盖”来完成。在子类中,声明一个与父类同名、同参、同返回值类型、访问权限不缩小的方法,就可以将父类中的方法覆盖。子类对象调用该方法,将自动绑定到子类覆盖后的新方法。

方法覆盖-代码示例

示例代码-测试类


public class Tester {
 
    public static void main(String[] args) {
               
        Tiger t = new Tiger("东北虎",1,"白色");
 
        t.sound();  
 
    }
 
}

运行结果:


我是一只老虎~一只1岁的东北虎在吼叫!~~



持续更新,欢迎留言提议!
码字很累,多点赞多赞赏!


扫描二维码,关注AT阿宝哥
上一篇 下一篇

猜你喜欢

热点阅读