Java重载及关键字------this关键字/super关键字/final关键字

1 重载要求

要求
	1. 重载是要求在同一个类内,或者接口interface内
	2. 重载要求方法名必须一致!!!
	3. 重载要求方法的参数必须不一致!!!
	4. 重载对于方法的返回值没有任何的约束!!!

 2重载能解决的问题

1.简化代码结构,在同一个类内同名方法功能一致,但是参数满足多样化
2.简化程序员的开发压力
3.能够做到统一化处理方式【后面项目中案例给大家安排】

 3 代码演示

package com.qfedu.d_overload;

class Person {
	
	public void game() {
		System.out.println("大吉大利,今晚吃鸡");
	}
	
	public void game(String name) {
		System.out.println("玩" + name);
	}
	
	public int game(String name, int time) {
		System.out.println("玩" + time + "个小时" + name);
		return 1;
	}
}

public class Demo1 {
	public static void main(String[] args) {
		Person person = new Person();
		
		person.game();
		person.game("LOL");
		person.game("WOT", 2);
	}
}

this关键字补充

1 this关键字复习

this关键字用于在方法中区分成员变量和局部变量,解决就近原则问题。

 2 在一个构造方法中,通过this关键字调用其他构造方法

格式:
	1. 要求在一个构造方法中,Constructor
	2. this(实际参数);
	3. 会根据实际参数的类型,个数,顺序来选择对应的构造方法。

 3 代码演示和总结

 

package com.qfedu.d_overload;

/*
 * this关键字在一个构造方法,调用其他构造方法
 * 注意事项:
 * 		1. 不能通过this关键字调用当前所在构造方法,无穷递归!!!错误!!!
 * 		2. this(实际参数); 根据实际参数的类型,个数和顺序来完成的
 * 		3. Constructor call must be the first statement in a constructor
 * 			通过this关键字调用其他构造方法,必须在当前方法体的第一行!!!
 * 		4. 能不能在一个构造方法中,通过this关键字,同时调用两个构造方法???
 * 			不能!!!因为构造方法调用必须在第一行,如果存在两个必然有一个在第二行,语法报错
 * 		5. 两个构造方法,能不能通过this关键字相互调用???
 * 			不允许,无穷递归!!!
 * 		6. 规范化,统一化方法执行操作,提高代码的安全性和一致性!!!
 * 
 */
class Dog {
	private String name;
	private String color;
	private int age;
	
	public Dog() {
		this(null, null, 0);
	}
	
	public Dog(String name) {
		this(name, null, 0);
	}
	
	public Dog(String name, String color) {
		this(name, color, 0);
	}
	
	public Dog(String name, String color, int age) {
		this.name = name;
		this.color = color;
		this.age = age;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}

} 

public class Demo2 {

}

 super关键字【鸡肋】

.1super关键字作用

1. super关键字可以用于在子类和父类之间,同名成员变量,同名成员方法调用时明确区分。2. super关键字可以显式调用父类的构造方法,用于初始化父类的成员变量数据。
3. super关键字使用的格式,规范和this非常类似。

2 代码演示

2.1 super关键字区分成员变量和成员方法

package com.qfedu.e_super;

class Father {
	public String name;
	public String age;
	
	public void game() {
		System.out.println("黄金矿工");
	}
}

class Son extends Father {
	public String name;
	public String age;
	
	@Override
	public void game() {
		System.out.println("PUBG");
	}
	
	public void test() {
		// 调用子类的成员方法,就近元素
		game();
		
		// super关键字调用父类的game方法
		super.game();
		
		// 调用子类成员变量
		name = "大头儿子";
		
		// super关键字调用父类的成员变量
		super.name = "隔壁老王";
	}
}

public class Demo1 {	
	
}

2.2 super关键字调用构造方法

package com.qfedu.e_super;

/*
 * super关键字在子类构造方法中,调用父类构造方法
 * 格式:
 * 		super(实际参数);
 * 		会根据实际参数来选择使用父类对应数据类型,个数,顺序的构造方法,用于初始化父类的
 * 		成员变量数据。
 * 
 * 注意事项:
 * 		1. 在没有指定选择哪一个父类构造构造方法,作为子类初始化父类成员变量空间的操作时
 * 		Java编译器会默认选择父类的无参数构造方法。
 * 		2. 选择使用父类的有参数构造方法,初始化父类成员变量空间
 * 		3. 父类数据的交给父类的构造方法操作,不要在子类中操作。
 * 		4. super关键字显式调用父类的构造方法,必须在代码的第一行
 * 		5. super关键字调用构造方法,和this关键字调用构造方法,是否能共存???
 * 			【显式】情况下不可以!!!
 * 			但是省略通过super关键字调用父类构造方法的情况下,Java编译器会在
 * 			编译的过程中,默认选择无参数父类构造方法使用
 */
class Animal {
	private String name;

	public Animal() {
		System.out.println("Animal无参数构造方法");
	}

	public Animal(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

class Cat extends Animal {
	private String color;

	public Cat() {
		System.out.println("Cat无参数构造方法");
	}

	public Cat(String color) {
		this();
		this.color = color;
		System.out.println("Cat有参数构造方法");
	}
	
	public Cat(String color, String name) {
		super(name);
		this.color = color;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}
}

public class Demo2 {
	public static void main(String[] args) {
		Cat cat = new Cat("玳瑁猫");
		
	}
}

final 关键字

最终!!!
	final关键字可以修饰
	局部变量  有且只能被赋值一次,赋值之后不可以修改           
    成员变量  定义时必须初始化,未初始化报错               
    成员方法  使用final修饰的方法为最终方法,不能被重写!!!    
    类 没有子类,不能被继承                        
	Java中是存在一些类是使用final修饰的          
		String类    无法被继承  
package com.qfedu.f_final;

/*
final关键字可以修饰
	局部变量  有且只能被赋值一次,赋值之后不可以修改
	成员变量  定义时必须初始化,未初始化报错
	成员方法  使用final修饰的方法为最终方法,不能被重写!!!
	类 没有子类,不能被继承
		Java中是存在一些类是使用final修饰的
			String类
 */
final class Father {
	final public void game() {
		System.out.println("黄金矿工!!!");
	}
}

// The type Son cannot subclass the final class Father
// Son类不能是final修饰的类Father类的子类,不能继承Father
// class Son extends Father {
	// The blank final field age may not have been initialized
	// 使用final修饰的成员变量还没有被初始化
	// final int age = 10;
	
	// Cannot override the final method from Father
	// 使用final修饰的方法为最终方法,不能被重写!!!
//	public void game() {
//		System.out.println("PUBG");
//	}
// }

public class Demo1 {
	public static void main(String[] args) {
		
		final int num;
		num = 10;
		
		// The final local variable num may already have been assigned
		// 使用final修饰的局部变量num已经被赋值
		// num = 20;
	}

2 思考题

package com.qfedu.f_final;

class Dog {
	String name;
	int age;
}

public class Demo2 {
	public static void main(String[] args) {
		Dog dog = new Dog();
		
		dog.name = "八公";
		dog.age = 15;
		
		/*
		 * final修饰的是dog1,dog1是一个类对象,同时是一个引用数据类型的变量。
		 * dog1存储数据不可以改变!!!dog1指向不可以改变,但是dog1指向空间
		 * 中的内容可以改变。
		 * 
		 * dog1看作你你的房产证,房产证上面的地址是不可以改变的!!!
		 * 但是房子装修和房产证有关吗?
		 */
		final Dog dog1 = new Dog();
		
		// dog1能不能操作成员变量???
		dog1.name = "骚杰";
		dog1.age = 16;
		
		// 能不能修改???
		dog1.name = "一杯二锅头";
		dog1.age = 20;
		
		Dog dog2 = dog1;
		dog2 = new Dog();
		
		// The final local variable dog1 cannot be assigned. 
		// It must be blank and not using a compound assignment
		// dog1 = new Dog();
	}
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值