`

java学习之重载(overload) 重写(override) 继承(extends) 多态

 
阅读更多
重载方法满足以下条件:

                               1. 方法名要相同

                               2. 方法参数不同(数量,类型,顺序)

                               3. 返回值可以同可不同

                               4. 修饰符号可同可不同
方法的覆盖满足以下条件:
                               1. 首先要有继承

                               2. 子类方法名称和方法签名必须与覆盖的方法相同

                               3. 子类方法的返回类型必须与覆盖的方法相同

                               4. 子类不能缩小所覆盖方法的访问权限

                               5. 子类方法不能抛出比覆盖方法更多的异常

方法的重载(overload)就是:


     方法名相同,方法参数的个数,顺序,类型至少有一个不同,方法返回类型可以不同,修饰符也可以不同。

public class TestConstract {
public static void main(String[] args, int r) {
}

//少一个参数,返回类型也不影响
public static int main(String ag) {
return 0;
}

//当参数相同时报错,返回值不同时,报错,所以返回值不是重载的条件 
// public static int main(String[] args, int r){
// return 0;
// }

// //修饰符也不是构成重载的条件
// private static int main(String[] args,int r){
// return 0;
// }

//参数顺序不同,没问题
public static void main(int r,String[] args){

}

/**
* 总得来说,影响方法重载的是参数的类型,参数顺序和个数。
*/
}


方法的重写覆盖(override):子类(所以说要有继承)方法的名称,返回类型,参数签名必须和父类的是一样的,且子类不能缩小父类的访问权限(public,private。。),这违背了多态,子类不能抛出比父类更多或者大的异常 ,重写只能存在于子类和父类,在同一个类中只存在重载,不存在重写。父类的静态方法不能被子类覆盖成非静态的方法,但是子类可以定义和父类同名的静态方法来影藏父类的静态方法,但是也要满足覆盖的条件。子类影藏父类的静态方法和覆盖父类的实例方法的区别在于,在运行时,java虚拟机把静态方法和所属的类绑定,而把实例方法和所属的实例绑定。同样父类的非静态方法不能被子类覆盖成静态方法。父类的私有方法不能被子类覆盖,因为覆盖的前提是子类继承了那个方法,而私有的并没有被继承。最后就是抽象的。父类的抽象方法可以通过两种路径覆盖,第一种是实现父类的抽象方法,并扩大权限,第二种是重新声明抽象方法,但不实现,仅仅为了扩大权限,父类的非抽象方法可以重载为抽象方法(183页,孙为琴 面向对象)

多态的特征:               

                               1. 对于一个引用类型的变量,编译器按照他申明的类型处理

                               2. 对于一个引用类型的变量,运行时java虚拟机按照他实际引用的对象处理

                               3. 在运行时环境中,通过引用变量来访问所应用对象的方法和属性时,采用如下绑定规则:实例方法与引用变量实际引用的对象的方法绑定(既实例方法绑定其对象);静态方法与引用变量所声明的类型的方法绑定(既静态方法绑定起引用变量的类型);成员变量(包括静态变量和实例变量)与引用变量所声明的类型的成员变量绑定(既属性绑定期引用变量的类型)

继承的特征: 继承关系最大的弱点是打破了封装,子类能够访问父类的实现细节,子类与父类之间紧密耦合,子类缺乏独立性,从而影响子类的可维护性。为了尽可能的避免这一缺陷,应该遵循以下原则:

                                1. 精心设计专门用来被继承的类,继承树的抽象出比较稳定

                                2. 对于父类中不允许被覆盖的方法,采用final修饰符来禁止被子类覆盖

                                3. 对于不是专门用来被继承的类,禁止被继承

                                4. 休闲考虑用组合关系提高代码的 可重用性
分享到:
评论

相关推荐

    Java重载和重写的区别--源码实例

    // 对overload测试的文件:OverloadTest.java public class OverloadTest { // 下面几个方法用来验证可以通过定义不同的参数类型和参数的数目进行方法重载。 public void fun(){ System.out.println("method ...

    Java面试宝典2017.zip

    28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 29、super.getClass()方法调用 21 30、String是最基本的数据类型吗? 22 31、String s = ...

    java面试题及答案.doc

    7. Overload和Override的区别,试用java代码举例。 8. error和exception有什么区别? 9. abstract class和interface有什么区别? 10. final, finally, finalize的区别,试用java代码示例。 11. 什么时候用assert。...

    安卓java读取网页源码-questions:自问自答

    安卓java读取网页源码 questions 自问自答 待初答 注:认真对待每一个答案。 Java String、StringBuilder ...重写(Override)与重载(Overload)的区别 父类的静态方法能否被子类重写 静态属性和静

    Java面试宝典

    一. Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?...28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21

    Java面试宝典2011版

    28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 29、super.getClass()方法调用 21 30、String是最基本的数据类型吗? 22 31、String s = "Hello...

    java 面试常问的问题 如何回答

    28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 29、super.getClass()方法调用 21 30、String是最基本的数据类型吗? 22 31、String s = "Hello...

    Java问题宝典2012版

    28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 23 29、super.getClass()方法调用 23 30、String是最基本的数据类型吗? 24 31、String s = "Hello...

    JAVA面试题最全集

    7.Java多态的实现(继承、重载、覆盖) 8.编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能...

    Java面试宝典2020修订版V1.0.1.doc

    14、构造器可不可以被重载或重写? 16 15、Java中有没有多继承? 16 16、抽象类和接口的区别? 17 17、java中实现多态的机制是什么? 17 19、String和StringBuffer的区别?StringBuffer和StringBuilder区别? 17 21...

    整理后java开发全套达内学习笔记(含练习)

    Overload [java] 方法的重载(不同参数列表的同名方法) [,әuvә'lәud] Override [java] 方法的覆盖(覆盖父类的方法) [,әuvә'raid] polymiorphism[java] 多态 (polymorphism 多形性[,pɒli'mɒ:fizm]) ...

    java 面试题 总结

    14、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一...

    java面试宝典

    44、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类?是否可以implements(实现)interface(接口)? 12 45、内部类可以引用他包含类的成员吗?有没有什么限制? 12 46、java 中实现多态的机制是什么...

    java面试宝典2012版.pdf

    28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 29、super.getClass()方法调用 30、String是最基本的数据类吗? 31、String s = "Hello";s = s +...

    Java面试宝典-经典

    28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 29、super.getClass()方法调用 21 30、String是最基本的数据类型吗? 22 31、String s = ...

    Java面试宝典2010版

    28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 29、super.getClass()方法调用 21 30、String是最基本的数据类型吗? 22 31、String s = "Hello...

    java面试题大全(2012版)

    28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 29、super.getClass()方法调用 21 30、String是最基本的数据类型吗? 22 31、String s = "Hello...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【基础】重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分? 17 【基础】abstract class和interface有什么区别? 18 【基础】静态嵌套类(Static Nested Class)和内部类(Inner Class)...

    java基础题 很全面

    68. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 15 69. LINUX下线程,GDI类的解释。 15 70. java常用的设计模式?说明工厂模式。 15 71. 内部类可以...

    最新Java面试宝典pdf版

    28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 29、super.getClass()方法调用 21 30、String是最基本的数据类型吗? 22 31、String s = "Hello...

Global site tag (gtag.js) - Google Analytics