重载

1.一个类中不能声明多个相同的方法,属性。
2.上面的相同指的是方法名,参数列表相同。和返回值类型无关。
3.如果方法名相同,但是参数列表(个数,顺序,类型)不相同,会认为是不同的方法,在java中被称之为重载

下面就是相同的方法[方法名和参数列表相同]

class UserLogin{
void login(){
System.out.println("微信登录");
}
void login(){
System.out.println("账号密码登录");
}
}
ps:上面是两个不相同的方法,方法名和参数列表相同

不同的方法

class UserLogin{
void login(String wx){
System.out.println("微信登录");
}
void login(){
System.out.println("账号密码登录");
}
}
ps:上面是两个不同的方法,虽然他们的名称相同,但是参数列表不同

重载的简单演示

public class study01 {
public static void main(String[] args) {
UserLogin user1 = new UserLogin();
user1.login("weixin");
user1.login("123", 456);
}
}
class UserLogin{
void login(String wx){
System.out.println("微信登录");
}
void login(String acount, int number6){
System.out.println("账号密码登录");
}
}
ps:控制台打印的是:
微信登录
账号密码登录

构造方法也存在重载

public class study01 {
public static void main(String[] args) {
UserLogin user1 = new UserLogin();
user1.login("weixin");
user1.login("123", 456);
}
}
class UserLogin{
// 执行的是这个
UserLogin(){
System.out.println("构造方法");
}
// 如果要执行这个,需要传递一个参数
UserLogin(String Logintype){
System.out.println("构造方法"+ Logintype);
}
void login(String wx){
System.out.println("微信登录");
}
void login(String acount, int number6){
System.out.println("账号密码登录");
}
} 执行的是:
构造方法
微信登录
账号密码登录

如果在一个构造方法中,想要调用其他的构造方法,那么需要使用关键字 this

在一个构造方法中调用其的构造方法

package studyDemo9yue;
public class study01 {
public static void main(String[] args) {
UserLogin user1 = new UserLogin();
}
} class UserLogin{
// 执行的是这个
UserLogin(){
// 在构造函数中调用另外一个构造函数,使用this;并且this要在该函数的最顶部
this("微信登录");
} UserLogin(String Logintype){
// 在构造函数中调用另外一个构造函数,使用this;并且this要在该函数的最顶部
// 通过参数来判断调用的是哪一个构造函数
this(Logintype, "张三");
}
UserLogin(String Logintype, String userName){
System.out.println(Logintype + userName);
}
}

java 基本数据类型的位数

byte     1字节      8  bit
short 2字节 16 bit
int 4字节 32 bit
long 8字节 64 bit long型的结尾需要加L
上面的是:整数类型 float 4字节 32 bit 对于float类型,需要加上f后缀。
double 8字节 64 bit 小数默认为double
上面的是:浮点类型 char 2字节 16 bit 字符类型 boolean 1字节 1 bit 布尔类型

基本数据类型在匹配方法时,可以在数值不变的情况下,扩大数据精度

public class study01 {
public static void main(String[] args) {
byte a=10;
demo1(a);
}
static void demo1(byte b){
System.out.println("bbb");
}
static void demo1(short s){
System.out.println("ssss");
}
static void demo1(char c){
System.out.println("cccc");
}
} 输出的是:
bbb这个很好理解。 因为是按照类型来匹配的。
如果下面的方法中没有byte会怎么样呢?
public class study01 {
public static void main(String[] args) {
byte a=10;
demo1(a);
} static void demo1(short s){
System.out.println("ssss");
}
static void demo1(char c){
System.out.println("cccc");
}
}
输出的是:ssss
因为:基本数据类型在匹配方法时,可以在数值不变的情况下,扩大数据精度。

byte类型无法和char类型做转化。因为char没有负数。但是byte存在负数。

重载-思考打印多少

public class study01 {
public static void main(String[] args) {
// AA aa = new AA() 这个就是多态,多态其实就是约束了对象的使用场景,这里的aa是啥类型? 回答:AA类型
// 果方法名相同,但是参数列表(个数,顺序,类型)不相同,会认为是不同的方法,在java中被称之为重载
// 因此这里的aa是AA类型。输出的是aa
AA aa = new AA();
test(aa);
}
static void test(AA aa){
System.out.println("aaa");
}
static void test(BB bb){
System.out.println("bbb");
}
}
class AA{ }
class BB extends AA { }
打印出aaa

重载和多态的思考

new的是子类对象,声明的是父类。那么实例只能取调用父类方法和属性
首先你要弄清楚类型 AA aa = new AA(); 这里是AA类型
子类类型赋值给父类(这个变量的类型是父类) Father f1 = New Son(), 调用子类方法报错。 调用父类方法OK。这个就是多态
public class study01 {
public static void main(String[] args) {
// new的是子类对象,声明的是父类。那么实例只能取调用父类方法和属性
AA aa = new BB();
test(aa);
}
static void test(AA aa){
System.out.println("aaa");
}
static void test(BB bb){
System.out.println("bbb");
}
} class AA{ } class BB extends AA { }
打印的是:aaa

会报错吗?

package goodStudy;=
public class goodStudy{
public static void main(String[] args) {
AA a1 = new BB();
// 这里调用会报错吗?
test(a1);
}
// static void test(AA aa){
// System.out.println("aaa");
// }
static void test(BB bb){
System.out.println("bbb");
}
} class AA{ } class BB extends AA { }

我们发现会报错?为啥会报错呢?

AA a1 = new BB();

test(a1 ); 报错。 因为a1是AA类型的。在调用test的时候没有AA类型了,只有BB类型这个参数。所以会报错。

怎么能不能它报错呢?

引用数据类型没有提升精度的概念

我们都知道,基本数据类型有提升精度的概念。
但是引用数据类型:没有提升精度的概念
它提升的是类型的级别。AA类型-->如果没有,就会去找Object类型
也就是说如果参数类型是Object,就不会报错,那么我们去尝试一下

引用数据类型没有提升精度的概念(2)

刚刚我们说了:AA类型-->如果没有,就会去找Object类型。

这样的说法还不够准确,准确的说法是:

AA类型-->如果没有,去找AA的父类--->还没有才是Object类型

下面我们再来验证一下哈

AA类型-->如果没有去找AA的父类--->没有才是Object类型

package goodStudy;
public class goodStudy{
public static void main(String[] args) {
// AA类型-->如果没有,去找AA的父类--->还没有才是Object类型
BB a1 = new BB();
// 这里调用会报错吗?
test(a1);
}
static void test(AA aa){
System.out.println("AA aa");
}
}
class AA{ }
class BB extends AA { }

java重载-构造方法也存在重载-数据类型的提升的更多相关文章

  1. (1)构造方法和方法重载 (2)this关键字 (3)方法的传参和递归调用

    1.构造方法和方法重载如: Person p = new Person(); - 声明Person类型的引用p指向Person类型的对象 p.show(); - 调用名字为show()的成员方法 1. ...

  2. 构造方法及方法(重载)与this关键字的使用

    一:构造方法的概念:             构造方法是一种特殊的方法,它是一个与类同名的方法.对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化.当类实例化一个对象时会自动调用构造方法. ...

  3. Java中的构造函数和重载

    一.Java中的构造函数 构造函数是对象被创建时初始化对象的成员方法,它具有和它所在的类完全一样的名字.构造函数只能有入口参数,没有返回类型,因为一个类的构造方法的返回类就是类本身.构造函数定义后,创 ...

  4. Java继承、重写与重载

    1.java继承 1.1概念 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为. 继承可以使用extends和implem ...

  5. Java的函数与函数重载

    关于Java的函数与函数重载 关于Java的函数与函数重载 1. 函数 假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹.发射炮弹的动作都需要使用一段百行左右的程序代码,在每次发射炮弹的地方都要 ...

  6. java中的重写与重载

    重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类 ...

  7. Java常见面试题02-方法重写和方法重载的区别?方法重载能改变返回值类型吗?

    方法重写和方法重载的区别?方法重载能改变返回值类型吗?       A:Override方法重写和Overload方法重载的区别? Overload是否可以改变返回值类型?可以 方法重写 •  子类中 ...

  8. java中构造方法和普通方法的区别

    1.普通方法: 定义:简单的说方法就是完成特定功能的代码块. 普通方法定义格式: 修饰符   返回值类型   方法名 (参数类型 参数名1,参数类型 参数名2,.........) { 函数体: re ...

  9. Java中构造方法、实例方法、类方法的区别

    1. 构造方法 构造方法负责对象的初始化工作,为实例变量赋予合适的初始值.必须满足以下的语法规则: 方法名与类名相同: 不要返回类型(例如return.void等): 不能被static.final. ...

  10. java中构造方法和方法super/this超类与子类中初始化顺序

    java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望 ...

随机推荐

  1. 鸿蒙NEXT开发案例:随机密码生成

    [引言] 本案例将实现一个随机密码生成器.用户可以自定义密码的长度以及包含的字符类型(大写字母.小写字母.数字.特殊字符),最后通过点击按钮生成密码,并提供一键复制功能. [环境准备] •操作系统:W ...

  2. .NET使用Umbraco CMS快速构建一个属于自己的内容管理系统

    前言 今天大姚给大家分享一个.NET开源.免费(MIT License).功能强大.灵活易用的内容管理系统:Umbraco CMS.本文将介绍在.NET中如何使用Umbraco CMS快速构建一个属于 ...

  3. java——棋牌类游戏斗地主(singleddz3.0)

    这是本人最近一段时间写的斗地主的java代码,大体框架都实现了,主要缺少,AI的智能算法. 下载地址http://download.csdn.net/detail/novelly/5695445 im ...

  4. 加密 DB2 Universal Database 中的数据值

    在本文中,我们演示了 IBM DB2 Universal Database Version 7.2 中新的加密函数如何提供简单方式来加密敏感数据.  评论: Bruce BenfieldIBM Ric ...

  5. nginx之日志处理

    日常对于NGINX日志文件的处理 1.将访问日志中爬虫相关请求导出 cat access.log | grep Baiduspider > spider.log

  6. OS之《机械硬盘》

    数据的组织 一个磁盘设备 ---->多个物理盘片 一个物理盘片---->正反两面存储面 一个存储面---->多个磁道(每个磁道上存储容量时一样的,可存储相同数目的二进制位),所以,内 ...

  7. windows和Linux上安装nvm及相关配置

    Windows安装: 1.详情参考:https://blog.csdn.net/goods_yao/article/details/137854626本文详细介绍了在Windows系统中使用nvm(N ...

  8. Flutter GestureDector点击空白区域不响应

    GestureDector点击空白区域不响应 当GestureDector嵌套Container时,当Container子组件为Text时,点击空白区域不响应点击事件 GestureDetector( ...

  9. TS 原理详细解读(7)绑定1-符号

    在上一节主要介绍了语法树的解析生成.就好比电脑已经听到了"你真聪明"这句话,现在要让电脑开始思考这句话的含义--是真聪明还是假聪明. 这是一个非常的复杂的过程,接下来将有连续几节内 ...

  10. git clone 指定 ssh-key 文件

    环境 & 软件 mac OS 问题 git clone 不是默认 ssh-key,无法克隆 解决方法 用ssh-add命令将对应的私钥加入到缓存 // ssh-add 自定义名称 // 例子 ...