Java构造器方法深入理解

 更新时间:2021年09月14日 10:31:53   作者:威斯布鲁克.猩猩  
这篇文章主要介绍了Java构造器方法深入理解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

重载

1.构造器的重载

因为构造器的名字必须与类名相同,所以同一个类的所有构造器名肯定相同,构成重载;为了让系统能区分不同的构造器,多个构造器的参数列表必须不同。

class Person{
    int age;
    String name;
    public Person(){
    }
    public Person(int age){
        this.age = age;
    }
    public Person(int age,String name){
        this(age);
        this.name = name;
    }
}

2.方法的重载(overload)


1.定义:在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同即可。

两同一不同”:同一个类、相同方法名

参数列表不同:参数个数不同,参数类型不同

2.举例:

Arrays类中重载的sort() / binarySearch()

3.判断是否重载:

跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系!

class Person{
    public void getSum(int i,int j){//A    
        System.out.println("憨憨");
    }
    public void getSum(double d1,double d2){//B
    }
    public void getSum(String s,int i){//形参先后顺序不同,也构成重载//C
    }
    public void getSum(int i,String s){//D
    }
    public void getSum(int i,int j){//与方法体无关!!!!
        return 0;
    }
    public void getSum(int m,int n){//与参数名无关!!!!
    
    }
    private void getSum(int i,int j){//与权限修饰符大小无关!!!!
    
    }
}

4.在通过对象调用方法时,如何确定某一个指定的方法 :

方法名------>参数列表

重写

为什么要重写:父类的功能无法满足子类的需求

方法重写的前提:必须要存在继承的关系!

应用:重写以后,当创建子类对象以后,通过子类对象调用子父类的同名参数的方法时,实际执行的时子类重写父类的方法

重写的规定:

方法的声明:权限修饰符 返回值类型 方法名(形参列表) throws 异常的类型{

//方法体

}

约定俗称:子类中的叫重写的方法,父类中的叫被重写的方法

A. 子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同

B. 子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符

>特殊情况:子类不能重写父类中声明为private权限的方法

C. 返回值类型:

>父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void

>父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或A的子类

//这样算重写,String是Object的子类
pulbic Object show(){//父类方法
}
public String show(){//子类方法
}
//这样不是重写,返回值类型不同
pulbic void catch(){//父类方法
}
pulbic int  catch(){//子类方法
}

>父类被重写的方法的返回值类型是基本数据类型(比如:double).则子类重写的方法的返回值类型必须是相同的(double)

D.子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型.(可以抛出异常类型更少、异常类型更小、不抛出异常)

子类和父类中的同名同参数的方法要么都声明为非static的(考虑重写),要么都声明为static的(不是重写)。

注意:A 父类的静态方法不能被子类覆盖为非静态方法。 B 父类的静态方法不能被子类覆盖为静态方法。(这两点与上面的那句话表达的是一个意思)

E.静态方法不能被重写

原因:重写依赖于类的实例,而静态方法和类实例并没有什么关系。而且静态方法和类实例并没有什么关系。而且静态方法在编译时就已经确定,而方法重写是在运行时确定的(动态绑定)。(也可以说java多态体现在运行时、而static在编译时、与之相悖)

《JAVA编程思想》中多次的提到:方法是静态的、他的行为就不具有多态性。静态方法是与类、而非单个对象相关联的。

区分方法的重载和重写

重载:不表现为多态性。

重写:表现为多态性。

从编译和运行的角度来看:

重载,是指允许存在多个同名方法,而这些方法的参数不同。编译器根据方法不同的参数列表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就成了不同的方法。他们的调用地址在编译期间就绑定了。Java的重载是可以包括父类和子类的,即子类可以重载父类的同名不同参数的方法。

所以:对于重载而言,在方法调用之前,编译器就已经确定了所要调用的方法,这称为“早绑定”或“静态绑定”;

而对于多态,只有等到方法调用的那一刻,解释运行器才会确定所要调用的具体方法,这称为“晚绑定”或“动态绑定”;

引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚绑定,它就不是多态。”

重写规则补充

1.父类的抽象方法可以被子类通过两种途径重写(即实现和重写)。

2.父类的非抽象方法可以被重写为抽象方法(此时:子类必须为抽象类)。

到此这篇关于Java构造器方法深入理解的文章就介绍到这了,更多相关Java 构造器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring3.1.1+MyBatis3.1.1的增、删、查、改以及分页和事务管理

    Spring3.1.1+MyBatis3.1.1的增、删、查、改以及分页和事务管理

    这篇文章主要介绍了Spring3.1.1+MyBatis3.1.1的增、删、查、改以及分页和事务管理的相关资料,需要的朋友可以参考下
    2016-01-01
  • SpringBoot SpEL语法扫盲与查询手册的实现

    SpringBoot SpEL语法扫盲与查询手册的实现

    这篇文章主要介绍了SpringBoot SpEL语法扫盲与查询手册的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • JAVA十大排序算法之基数排序详解

    JAVA十大排序算法之基数排序详解

    这篇文章主要介绍了java中的基数排序,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 老生常谈Java网络编程TCP通信(必看篇)

    老生常谈Java网络编程TCP通信(必看篇)

    下面小编就为大家带来一篇老生常谈Java网络编程TCP通信(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • SpringBoot使用OpenCV示例总结

    SpringBoot使用OpenCV示例总结

    这篇文章主要介绍了SpringBoot使用OpenCV示例总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • spring 如何将配置信息注入静态变量的方法

    spring 如何将配置信息注入静态变量的方法

    本篇文章主要介绍了spring 如何将配置信息注入静态变量的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Java使用嵌套循环模拟ATM机取款业务操作示例

    Java使用嵌套循环模拟ATM机取款业务操作示例

    这篇文章主要介绍了Java使用嵌套循环模拟ATM机取款业务操作,结合实例形式分析了Java模拟ATM机取款业务操作的相关流程控制、数值判断等操作技巧,需要的朋友可以参考下
    2019-11-11
  • 浅谈Java并发编程之Lock锁和条件变量

    浅谈Java并发编程之Lock锁和条件变量

    这篇文章主要介绍了浅谈Java并发编程之Lock锁和条件变量,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • IDEA 2020.3 更新了机器学习都整上了

    IDEA 2020.3 更新了机器学习都整上了

    IDEA 欢迎窗口全新升级,首页增加三个选项卡,一个用于设置 IDE 界面的 Customize,一个用于插件安装的 Plugins,一个于访问帮助和学习资源的 Learn IntelliJ IDEA,另外包括之前用于管理项目的 Projects,需要的朋友可以参考下
    2020-12-12
  • Java Swing中JTable渲染器与编辑器用法示例

    Java Swing中JTable渲染器与编辑器用法示例

    这篇文章主要介绍了Java Swing中JTable渲染器与编辑器用法,结合实例形式较为详细的分析了Swing中JTable渲染器与编辑器的功能、使用方法及相关注意事项,需要的朋友可以参考下
    2017-11-11

最新评论