3.2.2 方法的重写

在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要对继承的方法进行一些修改,即对父类的方法进行重写。在子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型,且在子类重写的方法不能拥有比父类方法更加严格的访问权限。
例1:

class Animal{  //父类,动物类protected String name;protected int age;public void eat(){System.out.println(name+"正在进食。");}
}class Herbivore extends Animal{ //子类,食草动物类public void eat(){  //重写父类的方法System.out.println(name+"在吃草和树叶。");}
}class Carnivore extends Animal{ //子类,食肉动物类public void eat(){  //重写父类的方法System.out.println(name+"在吃捕猎到的动物肉。");}
}public class Test{public static void main(String[] args) {Herbivore h1=new Herbivore();h1.name="兔子小白";h1.eat();Carnivore c1=new Carnivore();c1.name="狮子席巴";c1.eat();}
}

上面的代码运行结果是:

兔子小白在吃草和树叶。
狮子席巴在吃捕猎到的动物肉。

可以看到,都是继承自Animal类的eat()方法,但是在两个子类中都被重写了,通过子类的对象调用eat()方法也是调用了重写后的方法。

3.2.3 super关键字

当子类重写父类的方法后,子类对象就无法访问父类原先那个没被重写的方法,为了解决这个问题,Java提供了super关键字,super关键字可以在子类中调用父类的普通属性、方法以及构造方法。
将上面的例1修改一下:

class Animal{  //父类,动物类protected String name;protected int age;public void eat(){System.out.println(name+"正在进食。");}
}class Herbivore extends Animal{ //子类,食草动物类public void eat(){  //重写父类的方法super.eat();  //调用父类的eat方法System.out.println(name+"在吃草和树叶。");}
}class Carnivore extends Animal{ //子类,食肉动物类public void eat(){  //重写父类的方法super.eat();  //调用父类的eat方法System.out.println(name+"在吃捕猎到的动物肉。");}
}public class Test{public static void main(String[] args) {Herbivore h1=new Herbivore();h1.name="兔子小白";h1.eat();Carnivore c1=new Carnivore();c1.name="狮子席巴";c1.eat();}
}

上面的代码运行结果是:

兔子小白正在进食。
兔子小白在吃草和树叶。
狮子席巴正在进食。
狮子席巴在吃捕猎到的动物肉。

在子类中访问父类的成员,可以在前面加上super关键字。
格式如下:
访问父类的属性: super.属性名
访问父类的普通方法: super.方法名(参数列表)
访问父类的构造方法: super(参数列表)

注意:通过super()调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。

3.2.2 方法的重写 3.2.3 super关键字相关推荐

  1. java方法重写和super关键字

    //java方法重写和super关键字 //在继承中,其实就是子类定义了和父类同名的方法 //就是方法,属性都是相通的 //重写限制: //被子类重写的方法不能拥有比父类方法更加严格的权限 //sup ...

  2. 百无聊赖之JavaEE从入门到放弃(八)IDEA常用快捷键 equals()方法 super关键字

    目录 一.IDEA快捷键和相关操作 二.重写equals()函数 三.super关键字_继承树追溯 除了构造方法之外的所有的属性和方法都被继承.但是,不是所有的都能直接使用. 当打印一个对象时,如果没 ...

  3. C# 继承实现父类方法、重写、重载

    继承是派生类(子类)去实现(重写<override>.重构<new>)基类(父类)的方法或属性.从而获取在派生类中要实现的功能. 子类调用父类构造方法,在父类中有个实现姓名和年 ...

  4. 虚方法、重写方法和抽象方法[转载]

    若一个实例方法的声明中含有 virtual 修饰符,则称该方法为虚方法 (virtual method).若其中没有 virtual 修饰符,则称该方法为非虚方法 (non-virtual metho ...

  5. java中方法的重写

    package com.atguigu.java1;/** ·方法的重写(体现为多态性,重载不体现为多态性)* 1.重写:子类继承父类之后,可以对父类中同名同参数的方法,进行覆盖操纵* 2.应用:重写 ...

  6. Java面向对象之继承,方法重写,super关键字,员工类系列继承题

    在程序中,如果想声明一个类继承另一个类,需要使用extends关键字. 格式: class 子类 extends 父类 {} 继承的好处 1.继承的出现提高了代码的复用性,提高软件开发效率. 2.继承 ...

  7. 009-对象—— 构造方法__construct析构方法__destruct使用方法 PHP重写与重载

    <?php /**构造方法__construct析构方法__destruct使用方法 PHP重写与重载*/ //构造方法:当实例化对象时,自动运行的方法 /*class channel{func ...

  8. java 重写set方法_Java程序设计-方法的重写(override)(笔记)

    定义:在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置.覆盖.在程序执行时,子类的方法将覆盖父类的方法. 总结: 1)应用:重写以后,当创建子类对象以后,通过子类对象调用子父类中的 ...

  9. java中怎样避免方法被重写

    1,将class抽象化,使用者只能通过继承的方式来调用方法. 具有一定的局限性(因为一个类只能继承一个抽象类,当出现两个或两个以上的抽象类需要调用时,抽象化的缺点就显现出来,个人建议使用抽象化的时候, ...

最新文章

  1. Quill编辑器IOS下无法获取焦点的解决方法
  2. IDEA中 30 秒生成 Spring Cloud Alibaba 工程
  3. 网站应分析哪些方面来提升网站优化的效果呢?
  4. mysql复制模式第四部分-----环形复制
  5. 射影几何笔记3:中心射影-透视射影
  6. 数组转json去除首尾引号_诞生于JavaScript,json的前世今生
  7. cuda编程_CUDA刷新器:CUDA编程模型
  8. Python 中argparse模块的使用
  9. Spring Boot一个极简且完整的后台框架
  10. python五位回文数_蓝桥杯,特殊回文数,Python
  11. Java String、StringBuffer、StringBuilder区别
  12. Linux特殊符号浅谈
  13. mysql创建定时任务 脚本_linux中定时执行mysql脚本
  14. MySQL内核月报 2014.11-MySQL· 5.7改进·Recovery改进
  15. Deming质量管理14点
  16. Filter过滤器详解
  17. biopython安装_Ubuntu中安装Biopython
  18. 前端用JS + SVG 实现关系图谱 流程图
  19. 如何去做一个完整的网站SEO优化方案!
  20. 【转】京东商城思维导图

热门文章

  1. C++语言基础——C++一本通:C++语言入门 1005:地球人口承载力估计
  2. vivo手机的坑-禁止微信浏览器网页点击图片,图片会自动放大
  3. java中boot是什么,Spring boot是什么
  4. pdf 改变页面大小 python_用Python开发PDF编辑器,实现PDF页面提取,页面合并与替换...
  5. 一个牛人给JAVA初学者的建议(很受用)
  6. python九九乘法表如何对齐_python怎么样输出九九乘法表
  7. android libbinder – Binder的Native实现
  8. 学习笔记(02):3华为工程师 ,带你实战C++(2018版)-02仿函数与智能指针的自实现...
  9. Java设计模式之——策略模式
  10. Android 微信支付总结