java重载-构造方法也存在重载-数据类型的提升

重载

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 {
	
}

posted @ 2023-12-07 10:13  何人陪我共长生  阅读(21)  评论(0编辑  收藏  举报