偶,学习java基础的菜鸟一枚,在学着后面知识时前面的个别概念有时不清、混淆,甚至存在断片的现象,如在学习毕向东老的师视频时遇到这样一道题: Class Demo{ int show(int a, int b){ return 0; } } 下面那些函数可以存在于Demo的子类中。 A. publicint show (int a, int b){ return 0;} B. privateint show (int a, int b){ return 0;} C. privateint show (int a, long b){ return 0;} D. publicshort show (int a, int b){ return 0;} E. staticint show (int a, int b){ return 0;} 答案为A和C。其中,A选项为覆盖,C选项为重载。 那什么是覆盖,什么是重载呢? 覆盖:如果子类定义的方法,其名称、返回类型及参数签名与父类的某个方法相匹配,那么该子类的方法覆盖了父类的方法,子父类之间应注意: //参考cdsnmdl的专栏 1. 子类的方法名称、返回类型及参数签名必须与父类的一致; 若子类返回类型是父类返回类型的子类,也可构成覆盖,如下例子: public class A{ public Object test(){} } public class B extends A{ public String test(){} } A类中test方法返回Object类型, B类中返回String类型,String类是Object类的子类,这种情况是允许的。 2. 子类方法的访问权限不能小于父类方法; 3. 子类方法不能抛出比父类方法更多的异常; 4. 方法覆盖只存在于子类和父类之间,同一个类中只能重载; 5. 父类的静态方法不能被子类覆盖为非静态方法,静态方法只能覆盖静态 ; 6. 父类的私有方法不能被子类覆盖; 7. 父类的抽象方法可以被子类通过两种途径覆盖(即实现和覆盖); 8. 父类的非抽象方法可以被覆盖为抽象方法;
重载:就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义,这几个方法互为重载。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。方法重载与访问修饰符和返回值类型无关, 即: 1. 方法名相同; 2. 方法的参数类型,个数,顺序至少有一项不同; 3. 方法的返回类型可以不相同; 4. 方法的修饰符可以不相同; 5. 可以抛出不同的异常; 以上是就重载和覆盖两个概念,结合跟老师学的及相关博客上学的做的简单总结,不确切的地方请指正! 另关于java的一些概念怎样加深理解,特向前辈们请教,谢谢!
|