精华内容
下载资源
问答
  • 子类在覆盖父类方法的时候,父类的引用是可以调用该方法的,如果父类的引用调用子类的方法,那么这个多出来的异常,就可能处于一种无法处理的状态(多态的用法)。下面,我就通过代码进行一下演示 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(){  } } public

    2、  方法覆写:

    ·子类方法的名称、参数名、返回类型与父类方法一致。

    ·子类方法不能缩小父类方法的访问权限。

    ·子类方法不能抛出比父类方法更多的异常子类。

    ·父类的静态方法不能被子类覆盖为非静态方法。(一下代码会导致编译错误)。

    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();//合法

    }

     

    展开全文
  • 1.方法的覆盖(重写): 就是在子类中重写了与父类...(5)被覆盖的方法不能为private, 否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。 (6)被覆盖的方法不能为static。如果父类中的方法为静态,而子类中

    1.方法的覆盖(重写):
    就是在子类中重写了与父类中有相同名字的方法。
    2、方法的覆盖原则:
    (1)覆盖方法的返回类型、方法名称、参数列表必须与原方法相同。
    (2)覆盖方法不能比原方法访问性差(即访问权限不允许缩小)
    (3)覆盖方法不能比原方法抛出更多的异常。
    (4)被覆盖的方法不能是final类型,因为final修饰的方法是无法覆盖的。
    (5)被覆盖的方法不能为private, 否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
    (6)被覆盖的方法不能为static。如果父类中的方法为静态,而子类中的方法不是静态,但是两个方法除了这-点外其他都满足覆盖条件,那么就会发生编译错误;反之亦然。
    (7)即使父类和子类中的方法都是静态的,并且满足覆盖条件,但是仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。

    展开全文
  • 方法覆盖

    2014-07-12 11:38:57
    3、子类方法不能抛出比父类方法更多的异常 4、方法覆盖只存在于子类和父类之间。在同一个类中方法只能被重载,不能被覆盖 5、父类静态方法不能被子类覆盖非静态方法 6、子类可以定义与父类静态方法...


    1、子类方法的名称、参数签名和返回类型必须与父类方法的名称、参数签名和返回类型一致

    2、子类方法不能缩小父类方法的访问权限

    3、子类方法不能抛出比父类方法更多的异常

    4、方法覆盖只存在于子类和父类之间。在同一个类中方法只能被重载,不能被覆盖

    5、父类的静态方法不能被子类覆盖为非静态方法

    6、子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法

            子类隐藏父类的静态方法和子类覆盖父类的实例方法的区别:静态方法与所属的类绑定,而实例方法与所属的

            实例绑定

    7、父类的非静态方法不能被子类覆盖为静态方法

    8、父类的私有方法不能被子类覆盖

    9、父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的抽象方法;二是子类重新声明父类的抽象方法

    10、父类的非抽象方法可以被覆盖为抽象方法

    展开全文
  • 方法重载 @Overload 方法名相同 方法的参数类型、个数、顺序、至少有一项不相同 ...子类方法不能抛出父类方法更多的异常 父类静态方法不能被子类覆盖为非静态方法 子类可以定义与父类静态方法同名静态方法,...
  • 2.子类方法不能抛出比父类方法更多的异常。 3.方法覆盖只存在于子类和父类之间。在同一个类中方法只能重载,不能被覆盖。 4.父类静态方法不能被子类覆盖非静态方法。 5.子类可以定义与父类静态方法同名...
  • 覆盖与重新区别

    2012-10-08 08:59:06
    1、覆盖的方法的标志必须要和被覆盖的方法的标志完全...4、被覆盖的方法不能private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。 方法覆盖与方法重载的异同 方法覆盖和方法重载具有以下相同点:
  • 重写方法不能比原方法抛出更多的异常重写的方法不能是final类型,因为final修饰的方法是无法重写的。 重写的方法不能private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。 重写的方
  • 菜鸟学习方法覆盖

    2011-06-08 22:51:28
    3.子类方法不能抛出比父类方法更多的异常; 4.方法覆盖只存在于子类和父类(包括直接父类和间接父类)之间。在同一个类中方法只能被重载不能被覆盖; 5.父类静态方法不能被子类覆盖非静态方法; 6.子类...
  • 重写 override,重载 overload,重写,重载,覆盖都是基于继承关系! 1、关于覆盖: 1)覆盖的方法的参数列表必须要和被覆盖的方法的参数列表...4)被覆盖的方法不能private,否则在其子类中只是重新定义了一个...
  • JAVA覆盖

    2012-03-16 16:51:21
    1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;  2、覆盖的方法的返回值必须和被覆盖的... 4、被覆盖的方法不能private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖
  • 1、覆盖的方法的标志必须要和被覆盖的方法...4、被覆盖的方法不能private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。  overload对我们来说可能比较熟悉,可以翻译重载,它是指我们可以定义一些
  • 1:在当前方法被覆盖时,覆盖他的方法必须抛出相同的异常异常的子类; 2:在当前方法声明中使用try-catch语句捕获异常; 3:如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出异常。 从...
  • 子类方法不能抛出比父类方法更多的异常 方法覆盖只存在于子类和父类之间,同一个类中只能重载 父类静态方法不能被子类覆盖为非静态方法 子类可以定义于父类静态方法同名静态方法,以便在子类中隐藏父类静态...
  • 方法的重写或方法的覆盖(overriding) 子类根据需求对从父类继承的方法进行重新编写 重写时,可以用super.方法的方式来保留父类的方法 构造方法不能重写 ...不能抛出比父类方法更多的异常 Obj
  • 重载和覆盖

    2013-04-14 09:16:33
    在覆盖要注意以下的几点: 1、覆盖的方法的标志必须要和被覆盖的方法的...4、被覆盖的方法不能private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。 在使用重载要注意以下的几点: 1、在使用
  • java覆盖和装饰模式

    2011-11-18 22:05:29
    覆盖: 覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。在覆盖要注意以下的几点: 1、覆盖的方法的标志必须要和被覆盖...4、被覆盖的方法不能private
  • 方法的覆盖(override): 基本都是对接口的实现,或子类对抽象父类的方法的实现。 在方法覆盖时注意: 1、覆盖的方法的标志必须要和被覆盖的...4、被覆盖的方法不能private,否则在其子类中只是新定义了一个方...
  • 方法的重写

    2020-05-12 16:58:32
    子类方法抛出异常不能大于父类重写方法的异常 方法的重载和重写 重载指的是一个类中可以有多个重名方法 参数的个数顺序数据类型不同; 重写指的是覆盖父类的方法; /** * @Override * 方法重写
  • override(重写,覆盖) (1)方法名、参数、返回值相同。 (2)子类方法不能缩小父类方法的...(6)被覆盖的方法不能private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖 class Fu{ int num = 3;...
  • java中方法的重写

    2020-07-06 20:46:20
    java中方法的重写 1.定义 在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。...子类方法抛出异常不能大于父类重写方法的异常 注意: 子类与父类中同名同参数的方法必须同时
  •  3、重写的方法抛出异常必须和重写方法的所抛出异常一致,或者是其子类; 4、重写的方法不能private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。2.重载 Overload...
  • 方法重写 对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。 1.子类重写的方法的方法名和形参列表与父类重写的方法的方法名和形参列表相同...4.子类重写的方法抛出的异常类型不大于父类的抛出异常类型...
  • 3、子类方法不能抛出比父类方法更多异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义final不能重写。 overload(重载,过载) 1、参数类型、个数、顺序至少有一个不相同。 2、不能...
  • java 继承中重写父类方法

    万次阅读 2015-05-10 16:49:52
    重写父类方法子类扩展(extends)了父类,子类是一种特殊父类。子类可以获得父类所有...两小指是子类方法的返回值类型要小于或等于父类被覆盖方法的返回值,子类方法声明抛出的异常应比父类方法抛出的异常要小或相
  • 方法的重写 定义 在子类中可以根据需要对父类中继承来的方法进行改造,也成为方法的重置、覆盖。在程序执行时,子类的方法覆盖父类的方法。...子类方法抛出异常不能大于父类重写方法的异常。 四种访问权限...
  • 多态 重载与覆盖

    2012-05-30 23:39:57
    覆盖: 在基类中定义了一个非虚拟函数,然后在派生类中又定义了一个同名同参数同返回类型的函数,这就是覆盖了。在派生类对象上直接调用这个函数名,只会调用派生类中...4、被覆盖的方法不能private,否则在其子类中
  • 3、子类方法不能抛出比父类方法更多异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义final不能重写。 overload(重载) 1、参数类型、个数、顺序至少有一个不相同。  2、不能...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 176
精华内容 70
关键字:

被覆盖的方法为抛出异常