Java面向对象系列(9)- 方法重写
为什么需要重写?
父类的功能,子类不一定需要,或者不一定满足
场景一
- 重写都是方法的重写,和属性无关
- 父类的引用指向了子类
- 用B类新建了A类的对象,把A赋值给了B,这时候B是A,A又继承了B类,向上转型。所以调用B类方法的时候,也就是B=>test
- 定义的是static,new一个对象时,左边引用的类是哪个就用的哪个类下面的方法
package oop.demo05; //重写都是方法的重写,和属性无关
public class B {
public static void test(){
System.out.println("B=>test()");
}
}
package oop.demo05; //继承
public class A extends B{
public static void test(){
System.out.println("A=>test()");
}
}
package oop; import oop.demo05.A;
import oop.demo05.B; public class Application {
public static void main(String[] args) { //可以调用哪些方法和左边的类有关,和右边的new关系不大
A a = new A();
a.test();//A //父类的引用指向了子类
B b = new A();
b.test();//B
}
}
场景二
- 重写只和非静态方法有关。只有非静态方法可以重写;并且私有private修饰重写不起来
- 静态方法是类的方法,而非静态是对象的方法
- 有static时,b调用了B类的方法,因为b是用b类定义的
- 没有static时,b调用的是对象的方法,而b是用A类new的;即重写了父类的方法
- 静态方法只能继承,不能重写
重写
需要有继承关系,子类重写的是父类的方法!!!属性不一样的那叫重载,重写与属性无关!!!
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大但不能缩小 public(公共的) > protected(受保护的)>default(默认的)>private(私有的)
- 抛出的异常:范围,可以被缩小,但不能扩大 ClassNotFoundException --> Exception(大)
重写总结:
- 子类的方法和父类必要一致;方法体不同!
- 快捷键Alt+Insert选择override
- 重写的方法,注解解@Override
Java面向对象系列(9)- 方法重写的更多相关文章
- JAVA面向对象之重载与重写
重写:子类对父类方法的重新编写 返回值不变,形参不变 不能抛出新的或者范围更广的异常 class Animal{ public void move(){ System.out.println(&quo ...
- Java面向对象系列(7)- 什么是继承
继承 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模 extands的意思是"扩展".子类是父类的扩展 JAVA中类只有单继承,没有多继承 继承是类和类之间的一种关系. ...
- Java 面向对象—杂项(方法不能重写,修饰符,变量)
一.哪些方法不能被重写? 1.final 修饰的不能重写 2.static 修饰的不能重写 3.private 修饰的,因为私有的在子类中不可见 4.如果跨包的话,修饰符缺省的也不能被重写,因为缺省的 ...
- Java面向对象系列(2)- 回顾方法的定义
方法的定义 修饰符 返回类型 break:跳出switch,结束循环和return的区别 方法名:注意规范,见名知意 参数列表:(参数类型,参数名) 异常抛出 package oop.demo01; ...
- Java面向对象系列(3)- 回顾方法的调用
方法的调用 静态方法 非静态方法 形参和实参 值传递和引用传递 this关键字(继承篇讲解) 静态方法 非静态方法 形参和实参 package oop.demo01; public class Dem ...
- java中的equals()方法重写
如何java中默认的equals方法跟实际不符的话,需要重写equals方法.例如: public class TestEquals { public static void main(String[ ...
- Java 深度克隆 clone()方法重写 equals()方法的重写
1.为什么要重写clone()方法? 答案:Java中的浅度复制是不会把要复制的那个对象的引用对象重新开辟一个新的引用空间,当我们需要深度复制的时候,这个时候我们就要重写clone()方法. 2.为什 ...
- Java设计模式系列-工厂方法模式
原创文章,转载请标注出处:<Java设计模式系列-工厂方法模式> 一.概述 工厂,就是生产产品的地方. 在Java设计模式中使用工厂的概念,那就是生成对象的地方了. 本来直接就能创建的对象 ...
- Java 面向对象之继承和重写OverWrite,重写和重载的区别,抽象类
01继承的概述 A:继承的概念 a:继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系 b:在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作 ...
随机推荐
- 区块链-NFT 的实现原理
作者:林冠宏 / 指尖下的幽灵.转载者,请: 务必标明出处. 博客:http://www.cnblogs.com/linguanh/ 掘金:https://juejin.im/user/1785262 ...
- 长亭xray被动扫描
为了实现点到哪里扫到哪里,用长亭xray配合burp suite插件 插件名为Passive Scan Client https://github.com/lilifengcode/Burpsuite ...
- 【SpringMVC】@RequestMapping注解
@RequestMapping注解的源码 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNT ...
- bicabo C#多线程详解(三)
继续上一节的问题:调换两个新创建的线程启动顺序会是什么结果? using System; using System.Threading;namespace Test{ class TestThr ...
- win10下安装mysql5.7-建议安装-自定义位置
所需文件: 文件名字:mysql-installer-community-5.7.13.0.msi 开始安装: 01:勾选: 02:选择下一步 03:选择Custom安装 04:选择下一步 05:选择 ...
- hdfs数据迁移
有时候可能会进行hadoop集群数据拷贝的情况,可用以下命令进行拷贝 需要在目标集群上来进行操作 hadoop distcp hdfs://192.168.1.233:8020/user/hive/w ...
- Redis(二):基本数据类型
基础 # redis默认有16个数据库,数组下标从0开始,默认使用0号库 # 当我们启动服务器并连接客户端之后: set <key> <value> # 向数据库中添加数据用于 ...
- indexedDB数据库完整创建流程
1.打开数据库 使用 IndexedDB 的第一步是打开数据库,使用indexedDB.open()方法 var request = window.indexedDB.open(databaseNam ...
- Python3-sqlalchemy-orm 联表查询-无外键关系
#-*-coding:utf-8-*- #__author__ = "logan.xu" import sqlalchemy from sqlalchemy import crea ...
- Final Cut Pro X 10.4.7 修改长宽比, 截取某一段视频导出
新建项目时设置过长宽比例,现在要修改 窗口 - 项目属性 - 修改 - 自定义 要注意的是,导出时也要选择一下比例 截取某一段视频导出 将鼠标移到你要截取的片段的开始处,点击快捷键 i(标记-设定范围 ...