继承之重写(覆盖)父类方法的约束总结
来源:互联网 发布:java 积分兑换商城 编辑:程序博客网 时间:2024/06/02 01:36
继承中方法覆盖的多种约束:
1子类方法名称,参数签名,必须和父类的一致 否则编译出错
2子类的方法不能缩小父类方法的权限否则会编译出错。原因:若子类缩小了父类的方法的权限,在父类的引用变量引用子类的实例的时候,则不能访问子类private修饰的方法
//父类public class Base(){ public void method(){};}//子类public class Sub extends Base(){ private void method(){};//编译出错 public void main(arg s){ Base base=new Sub();//父类的引用变量引用子类的实例 base.method();//根据动态绑定规则base引用的是子类的method方法,二子类的的method方法是private类型不能被base访问 }}
3 子类的方法不能比父类的方法抛出更多的异常,子类抛出的异常必须和父类相同:或者子类抛出的异常必须是父类异常的子类
//合法情况ExceptionBase 是ExceptionSub1,ExceptionSub2 ……的父类public class Base{ public void method()throws ExceptionBase{};}public class Sub1 extends Base{ public void method() throws Exceptionsub1{};}public class Sub2 extends Base{ public void method() throws Exceptionsub1,ExceptionSub2 {};}public class Sub3 extends Base{ public void method() throws ExceptionBase {};}//不合法情况public class Base{ public void method()throws ExceptionSub1{};}public class Sub1 extends Base{ public void method() throws Exceptionsub1{};}public class Sub2 extends Base{public void method() throws Exceptionsub1,ExceptionSub2 {};//不合法 编译出错 //ExceptionSub2不是ExceptionSub1的子类抛出比父类更多的异常}public class Sub3 extends Base{ public void method() throws ExceptionBase {};//不合法,编译出错 }
4方法的覆盖只存在于子类和父类之间,同一个类里面的方法只能重载
5父类的静态方法不能被子类覆盖为非静态方法(不能去掉父类方法的static关键字)
6子类可以定义与父类的静态方法同名的静态方法,为了隐藏父类的静态方法(满足1,2,3条规则):带有static的方法 在子类自定义也类似于重写,但不是重写
7父类非静态方法不能覆盖为静态方法
8父类的非抽象方法可以被子类覆盖为抽象方法:加个abstract(前提子类为抽象类)
9父类private修饰的方法不能被子类重写
10父类的抽象方法子类可以通过两种方式重写
方式一:实现父类的抽象方法
方式二:重写声明该抽象方法(子类也必须是抽象类,否则不能这样声明 必须用方式一)
public class Base { abstract void method1(){}; abstract void method1(){};}public class sub1 extends Base { public void method1(){};//方式一 public abstract void method1(){};//编译出错}public abstract class sub2 extends Base { public void method1(){};//方式一 public abstract void method1(){};//方式二正确}
重载要求(两个必须,两个非必须):
1、方法名必须相同
2、参数的类型,个数,顺序必须至少一个不同
3、返回类型可以不同
4、方法权限可以不同(修饰符)
重载和重写的异同:
相同:
1、都必须方法名相同
2、都可以用在抽象方法和非抽象方法之间
不同:
1、重写要求方法名称,参数签名,返回类型必须一致;重载只要求方法名一致
2、重写只能用于子类覆盖父类方法,重载用于一个类中所有方法,包括父类的
3、重写对于抛出异常和访问权限有特殊要求,重载则没有
4、父类的方法只能被子类覆盖一次,一个类中的方法可以被重载多次
- 继承之重写(覆盖)父类方法的约束总结
- Java 子类继承父类方法的重写(或者覆盖,override)
- 关于继承时子类重写父类方法和覆盖父类变量的若干问题 (待进一步研究)
- 方法的覆盖(重写)
- 继承之方法的覆盖
- java 子类继承父类 -- 重写、覆盖
- 多态、继承---常量的覆盖和方法的重写
- 关于继承中(静态方法+私有方法)的覆盖与重写问题
- java基础学习之——子类重写(覆盖)父类的方法必须满足的条件
- 继承的顺序,子类覆盖继承父类的方法
- java学习之继承、重载、重写(覆盖)
- 黑马程序员之C#学习笔记: c#中重写(覆盖)和隐藏类的方法
- C#类方法的重写与覆盖
- Java的方法重写(覆盖)
- JAVA中子类是否可以可以继承、重写父类的静态方法--总结
- 重载、覆盖(重写)、多重继承的区别
- 黑马程序员--03.面向对象--03.子类父类方法重写和覆盖的理解【个人总结】
- java 子类继承父类 -- 重写、覆盖与多态
- 统计输出 图的环(c++ 有向加权图)
- CTF(信息安全夺旗赛)学习网址
- absolute、relative与float的学习
- iOS 延迟执行方法
- ubuntu安装了mysql 但是编译报错 mysql.h: No such file or directory
- 继承之重写(覆盖)父类方法的约束总结
- 树
- 2017NOMS全国运营峰会邀您同商互联网企业的商业化运营之路
- Maven如何导入jar包
- Longest Palindromic Substring解题心得
- 纯css实现table表格固定列和表头,中间横向滚动的思路-附案例
- mysql基本命令汇总
- java之《ssm》第三方QQ登录获取用户信息
- mysql主从