-
子类继承父类方法无法aop_JAVA 为什么子类继承父类方法之后,不能抛出比父类更多的异常...
2021-01-13 09:12:30子类在覆盖父类方法的时候,父类的引用是可以调用该方法的,如果父类的引用调用子类的方法,那么这个多抛出来的异常,就可能处于一种无法被处理的状态(多态的用法)。下面,我就通过代码进行一下演示 demo:我们先...子类在覆盖父类方法的时候,父类的引用是可以调用该方法的,如果父类的引用调用子类的方法,那么这个多抛出来的异常,就可能处于一种无法被处理的状态(多态的用法)。下面,我就通过代码进行一下演示 demo:
我们先定义一个Animal类:
class Animal
{
public void eat()throws IOException,FileNotFoundException
{
System.out.println("eat");
}
}
接着,我们再定义一个Tiger类继承该Animal类
class Tiger extends Animal
{
public void eat()throws IOException ,Exception
{
System.out.println("Tiger eat animal");
}
}
这样,tiger的eat方法里,就有一个Exception 异常,这个异常的级别高于IO。也就是说对IO异常的处理,无法处理Exception 异常。
这个时候,如果我们定义一个测试方法,测试动物吃东西这个方法。
如下:
class Test
{
public void TestAnimalEat(Animal a)
{
try
{
a.eat();
}
catch(FileNotFoundException e1)
{
e1.printStackTrace();
}
catch(IOException e2)
{
e2.printStackTrace();
}
}
}
那么,这个方法是完全正确的,因为他处理了eat方法的两个异常。一个抛出,一个捕获。
这个时候,如果我们再进行如下的操作:
class TestDemo
{
public static void main(String[] args)
{
Test t = new Test();
Tiger tiger = new Tiger();
t.TestAnimalEat(tiger);
}
}
则在调用tiger对象的时候,Test中的TestAnimalEat()方法只处理Animal类的eat()方法的两个异常,而这个Tiger类中的eat()方法多出来的Exception,就无法进行处理。所以,JAVA就不允许做这种子类抛出比父类更多的异常。
当然,这里说更多是不合适的,子类不能抛出父类异常本身和其子异常以外的其他异常。比如,如果父类抛出一个Exception 异常,那么子类就可以随心所欲的抛出很多的异常了。因为这些异常都是父类异常的子异常。因为用到了多态,动态绑定的特性。深刻理解了多态的写法上面就理解了。
那么如果要联系现实,应该如何说呢。
一个修理家电的人,他能够修理冰箱,电脑,洗衣机,电视机。 一个年轻人从他这里学的技术,就只能修理这些家电,或者更少。你不能要求他教出来的徒弟用从他这里学的技术去修理直升飞机。
-
方法的覆盖
2012-03-08 10:42:15·子类方法不能抛出比父类方法更多的异常子类。 ·父类的静态方法不能被子类覆盖为非静态方法。(一下代码会导致编译错误)。 public class Sup { public static void methed1(){ } } public2、 方法覆写:
·子类方法的名称、参数名、返回类型与父类方法一致。
·子类方法不能缩小父类方法的访问权限。
·子类方法不能抛出比父类方法更多的异常子类。
·父类的静态方法不能被子类覆盖为非静态方法。(一下代码会导致编译错误)。
public class Sup {
public static void methed1(){
}
}
public class Sub extends Sup {
public void methed1(){ /*警告,编译有错误*/
}
}
·子类可以定义与父类的静态方法同名静态方法,以便在子类中隐藏父类的静态方法。(但是也必须满足:子类方法的名称、参数名、返回类型与父类方法一致、子类方法不能缩小父类方法的访问权限、子类方法不能抛出比父类方法更多的异常子类的条件)
·子类的非静态方法不能被子类覆盖未静态方法。(编译出错)
public class Sup {
public void methed1(){
}
}
public class Sub extends Sup {
public static void methed1(){ /*警告,编译有错误*/
}
}
·所以由上面可以知道:子类复写与父类时,方法只能同时为Static,而不能一个为static一个不是static类型。
·父类的抽象方法可以被子类通过两种途径覆盖:1,、子类实现了父类的抽象方法;2、是子类重新声明父类的抽象方法。
public abstract class Sup {
abstract void methed1();
abstract void methed2();
}
public abstract class Sub extends Sup {
void methed1(){//实现父类的方法
}
abstract void methed2();//重新声明method2方法。
}
·父类的非抽象方法可以被覆盖未抽象方法。
public abstract class Sup {
void methed1(){
}
}
public abstract class Sub extends Sup {
abstract void methed1();//合法
}
-
Java:简单介绍方法的覆盖
2020-06-06 20:27:431.方法的覆盖(重写): 就是在子类中重写了与父类...(5)被覆盖的方法不能为private, 否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。 (6)被覆盖的方法不能为static。如果父类中的方法为静态,而子类中1.方法的覆盖(重写):
就是在子类中重写了与父类中有相同名字的方法。
2、方法的覆盖原则:
(1)覆盖方法的返回类型、方法名称、参数列表必须与原方法相同。
(2)覆盖方法不能比原方法访问性差(即访问权限不允许缩小)
(3)覆盖方法不能比原方法抛出更多的异常。
(4)被覆盖的方法不能是final类型,因为final修饰的方法是无法覆盖的。
(5)被覆盖的方法不能为private, 否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
(6)被覆盖的方法不能为static。如果父类中的方法为静态,而子类中的方法不是静态,但是两个方法除了这-点外其他都满足覆盖条件,那么就会发生编译错误;反之亦然。
(7)即使父类和子类中的方法都是静态的,并且满足覆盖条件,但是仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。 -
方法覆盖
2014-07-12 11:38:573、子类方法不能抛出比父类方法更多的异常 4、方法覆盖只存在于子类和父类之间。在同一个类中方法只能被重载,不能被覆盖 5、父类的静态方法不能被子类覆盖为非静态方法 6、子类可以定义与父类的静态方法... -
方法重载 与 方法覆盖
2020-07-04 20:21:15方法重载 @Overload 方法名相同 方法的参数类型、个数、顺序、至少有一项不相同 ...子类方法不能抛出父类方法更多的异常 父类静态方法不能被子类覆盖为非静态方法 子类可以定义为与父类静态方法同名的静态方法,... -
复习笔记:Java中 关于方法覆盖的总结
2017-01-03 20:55:252.子类方法不能抛出比父类方法更多的异常。 3.方法覆盖只存在于子类和父类之间。在同一个类中方法只能重载,不能被覆盖。 4.父类的静态方法不能被子类覆盖为非静态方法。 5.子类可以定义与父类的静态方法同名的... -
覆盖与重新的区别
2012-10-08 08:59:061、覆盖的方法的标志必须要和被覆盖的方法的标志完全...4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。 方法覆盖与方法重载的异同 方法覆盖和方法重载具有以下相同点: -
Java面试题:Java中的方法覆盖(Overriding)和方法重载(Overload)是什么意思?
2020-09-04 17:37:28重写方法不能比原方法抛出更多的异常。 被重写的方法不能是final类型,因为final修饰的方法是无法重写的。 被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。 被重写的方 -
菜鸟学习方法覆盖
2011-06-08 22:51:283.子类方法不能抛出比父类方法更多的异常; 4.方法覆盖只存在于子类和父类(包括直接父类和间接父类)之间。在同一个类中方法只能被重载不能被覆盖; 5.父类的静态方法不能被子类覆盖为非静态方法; 6.子类... -
重写,重载,覆盖之间的关系。
2013-11-23 19:42:00重写 override,重载 overload,重写,重载,覆盖都是基于继承关系! 1、关于覆盖: 1)覆盖的方法的参数列表必须要和被覆盖的方法的参数列表...4)被覆盖的方法不能为private,否则在其子类中只是重新定义了一个... -
JAVA覆盖
2012-03-16 16:51:211、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果; 2、覆盖的方法的返回值必须和被覆盖的... 4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖 -
覆盖和重载的区别以前一直讲不清楚
2014-04-07 11:10:571、覆盖的方法的标志必须要和被覆盖的方法...4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。 overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些 -
异常使用可遵循下面的原则
2019-04-01 13:48:201:在当前方法被覆盖时,覆盖他的方法必须抛出相同的异常或异常的子类; 2:在当前方法声明中使用try-catch语句捕获异常; 3:如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新异常。 从... -
【转】Java方法继承、方法重载、方法覆盖小总结
2012-01-10 01:59:24子类方法不能抛出比父类方法更多的异常 方法覆盖只存在于子类和父类之间,同一个类中只能重载 父类的静态方法不能被子类覆盖为非静态方法 子类可以定义于父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态... -
java方法重写和覆盖规则,以及equals和==区别
2021-01-21 14:45:56方法的重写或方法的覆盖(overriding) 子类根据需求对从父类继承的方法进行重新编写 重写时,可以用super.方法的方式来保留父类的方法 构造方法不能被重写 ...不能抛出比父类方法更多的异常 Obj -
重载和覆盖
2013-04-14 09:16:33在覆盖要注意以下的几点: 1、覆盖的方法的标志必须要和被覆盖的方法的...4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。 在使用重载要注意以下的几点: 1、在使用 -
java覆盖和装饰模式
2011-11-18 22:05:29覆盖: 覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。在覆盖要注意以下的几点: 1、覆盖的方法的标志必须要和被覆盖...4、被覆盖的方法不能为private -
override与overload:覆盖与重载
2011-08-17 15:01:08方法的覆盖(override): 基本都是对接口的实现,或子类对抽象父类的方法的实现。 在方法覆盖时注意: 1、覆盖的方法的标志必须要和被覆盖的...4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方... -
方法的重写
2020-05-12 16:58:32子类方法抛出的异常不能大于父类被重写方法的异常 方法的重载和重写 重载指的是一个类中可以有多个重名方法 参数的个数顺序数据类型不同; 重写指的是覆盖父类的方法; /** * @Override * 方法重写 -
override(重写,覆盖)和overload(重载,过载)的区别
2018-10-08 22:27:26override(重写,覆盖) (1)方法名、参数、返回值相同。 (2)子类方法不能缩小父类方法的...(6)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖 class Fu{ int num = 3;... -
java中方法的重写
2020-07-06 20:46:20java中方法的重写 1.定义 在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。...子类方法抛出的异常不能大于父类被重写方法的异常 注意: 子类与父类中同名同参数的方法必须同时 -
方法重载与重写的区别
2018-05-30 15:33:153、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类; 4、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。2.重载 Overload... -
Java-方法的重写(override/overwrite)
2020-03-19 12:20:26方法重写 对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。 1.子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同...4.子类重写的方法抛出的异常类型不大于父类的抛出异常类型... -
override(重写、覆盖)和overload(重载、过载)的区别
2019-10-03 09:53:223、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义为final不能被重写。 overload(重载,过载) 1、参数类型、个数、顺序至少有一个不相同。 2、不能... -
java 继承中的重写父类方法
2015-05-10 16:49:52重写父类方法子类扩展(extends)了父类,子类是一种特殊的父类。子类可以获得父类所有的...两小指的是子类方法的返回值类型要小于或等于父类被覆盖方法的返回值,子类方法声明抛出的异常应比父类方法抛出的异常要小或相 -
Java-方法的重写及四种访问权限修饰符
2019-12-26 20:51:07方法的重写 定义 在子类中可以根据需要对父类中继承来的方法进行改造,也成为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。...子类方法抛出的异常不能大于父类被重写方法的异常。 四种访问权限... -
多态 重载与覆盖
2012-05-30 23:39:57覆盖: 在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中...4、被覆盖的方法不能为private,否则在其子类中 -
重载(overload)、覆盖(override)的区别
2013-03-18 16:50:163、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义为final不能被重写。 overload(重载) 1、参数类型、个数、顺序至少有一个不相同。 2、不能...
-
PAT B1078 字符串压缩与解压 (20 分)
-
libFuzzer视频教程
-
8 字母的前趋或后继
-
Unity RUST 逆向安全开发
-
内网渗透测试
-
NodeMCU-ESP32开发实例-扫描可用WiFi网络及WiFi信号强度检测
-
RabbitMQ和Kafka详细笔记以及示例代码
-
四史答题软件安装包exe
-
golang缓存方式逐行读取文件内容练习
-
Samba 服务配置与管理
-
个人机器学习(Machine Learning, ML)笔记
-
3.8打包程序_打包程序
-
程序员工作法 学习总结笔记
-
基于情感字典和机器学习的股市舆情情感分类可视化Web
-
SpringBoot项目jar包运行时提示**.jar中没有主清单属性
-
用Go语言来写区块链(一)
-
MySQL 性能优化(思路拓展及实操)
-
5.3.保存截图图片
-
web项目从myeclipse转移到IDEA中,一直无法连接到server的问题解决方案
-
5.6.设置关机时间