重载

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. php的各种序列化对比

    php的各个序列化反序列化对比如下 function 10万条记录的序列化并写入(ms) 10万条记录文件读取并反序列化(ms) 100条记录序列化并写入(ms) 100条记录文件读取并反序列化(ms ...

  2. Java 10大优点—Part4—Java内存模型

    本文由 ImportNew - 靳禹 翻译自 zeroturnaround.如需转载本文,请先参见文章末尾处的转载要求. 在忙着参加在爱沙尼亚进行的 TEDx talk 演讲活动以及在比利时举办的一届 ...

  3. HTML5 网络监听,全屏

    1.网络状态监听 online事件:网络重新连通时触发 offline事件:网络断开时触发 <script> // 监听网络连接 window.addEventListener(" ...

  4. c++动态库详解

    dmjcb个人博客 原文地址 概念 动态库, 又称动态链接库(\(Dynamic\) \(Link\) \(Library\), \(DLL\)), 是包含程序代码和数据的可执行文件, 在运行时被程序 ...

  5. 好消息,在 Visual Studio 中可以免费使用 GitHub Copilot 了!

    前言 今天大姚给大家分享一个好消息,GitHub Copilot 可以免费使用了!在此之前若开发者要使用 GitHub Copilot 需要付费订阅,每月订阅费用起步价为 10 美元,而经过验证的学生 ...

  6. 【Python】【Jupyter】Jupyter 的简单使用 与 Python的基本输出输入

    上课无聊写着玩的,不必当真. Jupyter 的简单使用 与 Python的基本输出输入 目录 Jupyter 的简单使用 与 Python的基本输出输入 数据准备 输出 输入 一些练习 print( ...

  7. shell 下 exec,source,.,bash和sh以及export得区别

    exec执行命令时,不会启用新的shell进程.  source和 .也不会启用新的shell进程,在当前shell中执行,设定的局部变量在执行完命令后仍然有效.  bash或sh执行时,会另起一个子 ...

  8. 如何在Linux上使用pbcopy和pbpaste命令

    由于 Linux 和 Mac OS X 是基于 *Nix 的系统,因此许多命令可以在两个平台上运行.但是,某些命令可能在两个平台上都没有,比如 pbcopy 和 pbpast.这些命令仅在 Mac O ...

  9. 『玩转Streamlit』--集成Plotly

    之前介绍了如何在Streamlit App中使用Matplotlib库来绘图. 本篇介绍 Steamlit结合Poltly的方法,相比于Matplotlib,Poltly的交互性更强, 更适合在Web ...

  10. Qt加载天地图离线api开发包/从官网趴地图js代码/费了九牛二虎之力终于搞定

    一.前言说明 网上关于如何趴天地图离线api文件的文章,只有少量的两三篇,而且几乎没有说全和说对,搞得评论也是一片懵逼,这里不行那你不行,思路可以借鉴就是.索性花了点时间,自己研究了如何从官网一步步趴 ...