学习Java第十一天--面向对象之方法重载、构造方法

7.4 方法重载

7.4.1 概念

  • 有些情况下,对象的同一种行为可能存在多种实现过程;
  • 例如:人对象的吃行为,吃饭和吃药的过程就存在差异;
  • 到底采用哪种实现形式,需求取决于调用者给定的参数;
public class Person {
	public void eat(food a) {
		//食物放入口中
		//咀嚼
		//咽下
	}
	public void eat(pill a) {
		//食物放入口中
		//喝水
		//咽下
	}
	public void eat(chutty a) {
		//食物放入口中
		//咀嚼
		//吐出
	}
}
  • 重载(Overload):一个类中定义多个相同名称的方法;
  • 要求:
    方法名称相同;
    参数列表不同(类型、个数、顺序);
    与访问修饰符、返回值类型无关;
  • 调用带有重载的方法时,需要根据传入的实参去找到与之匹配的方法;
  • 好处:屏蔽使用差异,灵活,方便;
public class TestCalculator {

	public static void main(String[] args) {
		
		Calculator calc1 = new Calculator();
		
		System.out.println(calc1.add(5, 6));
		
		System.out.println(calc1.add(10.2 , 11.3 , 15.6 ));

	}

}

//计算器
class Calculator{
	
	public double add(double num1 , double num2) {
		return num1 + num2;
	}
	
	public double add(double num1 , double num2 , double num3) {
		return num1 + num2 + num3;
	}
}

7.4.2 代码调错

  • 思考:以下方法是不是重载?
    public void m(int a){}
    public void m(int b){}
  • 两个方法的方法名称和参数列表都相同,只有参数名称不一样,编译报错
  • 注意:只是参数名称不同,并不能构成方法的重载;

7.5 构造方法

7.5.1 概念

  • 构造方法:类中的特殊方法,主要用于创建对象;
  • 特点:
    名称与类名完全相同;
    没有返回值类型;
  • 创建对象时,触发构造方法的调用,不可通过句点手动调用;
  • 注意:如果没有在类中显示定义构造方法,则编译器默认提供无参构造方法;
  • 建议:必须手动添加无参的构造方法

7.5.2 对象的创建过程

  • 内存中开辟对象空间;
  • 为各个属性赋予初始值;
  • 执行构造方法中的代码;
  • [将对象的地址赋值给变量] //[]中的内容可省略

对象的内存分配:
在这里插入图片描述

public class TestConstractor {

	public static void main(String[] args) {
		
		//1.执行new Student2()构造对象
		//1.1 堆内存中开辟对象空间
		//1.2 将构造后的对象地址,赋值给stu1变量
		Student2 stu1 = new Student2();
		stu1.sayHi();
	}

}

class Student2{
	String name;
	int age;
	char sex;
	double score;
	
	public Student2() {
		//2.构造方法执行过程分两步:
		//2.1 初始化属性
		//2.2 执行构造方法中的逻辑代码
		System.out.println("---无参的构造方法---");
	}// 执行完构造方法后返回方法调用处

	public void sayHi() {
		System.out.println("Hello");
	}
}

7.5.3 构造方法重载

  • 构造方法也可以重载,遵循重载规则;
public class TestConstractorOverload {

	public static void main(String[] args) {
		
		new Teacher2();
		
		new Teacher2("jake");
		
		new Teacher2("Alex" , 30);
	}

}

class Teacher2{
	
	String name;
	int age;
	String sex;
	double salary;
	
	public Teacher2() {
		System.out.println("---无参的构造方法---");
	}
	
	public Teacher2(String n) {
		System.out.println("---1参的构造方法---");
	}
	
	public Teacher2(String n , int a) {
		System.out.println("---2参的构造方法---");
	}
}

7.5.4 默认构造方法

在这里插入图片描述

7.5.5 构造方法为属性赋值

public class TestConstructors{
	public static void main(String[] args){
		Student s = new Student("tom",20,"man","98.5");
		System.out.println(s.name+"\t"+s.age+"\t"+s.sex+"\t"+s.score);
	}
}
class Student{
	String name;
	int age;
	String sex;
	double score;
	public Student(String n,int a,String s,double sc){//由构造方法为各个属性赋值
		name = n;
		age = a;
		sex = s;
		score = sc;
	}
}

7.5.6 this关键字

  • 类是模板,可服务于此类的所有对象;
  • this是类中的默认引用,代表当前实例;
  • 当类服务与某个对象时,this则指向这个对象;
public class TestThisKeyword {

	public static void main(String[] args) {
		
		Student3 str = new Student3("tom" , 20 , "male" , 99.8);
		
		str.sayHi();
	}
}
class Student3{
	String name;
	int age;
	String sex;
	double score;
	
	public Student3(){}
	public Student3(String name) {
		this();//this([实参]);必须写在构造方法的首行;仅可在构造方法中使用
		System.out.println("---1参的构造方法---");
		this.name = name;
	}
	
	public Student3(String name , int age) {
		this(name);
		System.out.println("---2参的构造方法---");
		this.age = age;
	}
	
	public Student3(String name , int age , String sex) {
		this(name , age);
		System.out.println("---3参的构造方法---");
		this.sex = sex;
	}
	
	public Student3(String name , int age , String sex , double score) {
		this(name , age , sex );
		System.out.println("---4参的构造方法---");
		this.score = score;
	}
	
	public void sayHi() {
		System.out.println(this.name+"\t"+this.age+"\t"+this.sex+"\t"+this.score);
	}
}
  • this第一种用法:调用实例属性、实例方法。
    如:this.name、this,sayHi()

  • this第二种用法:调用本类中的其他构造方法。
    如:this()、this(实参)

7.6 总结

  • 什么是对象:
    一切客观存在的事物都是对象,万物皆对象;

  • 什么是类:
    定义了对象应具有的特征和行为,类是对象的模板;

  • 什么是方法重载:
    方法名相同、参数列表不同;

  • 什么是构造方法:
    类中用于创建对象的特殊方法,名称与类名相同,没有返回值,不可通过句点调用

  • 什么是this关键字:
    代表当前实例,通过this.访问实例成员;通过this()/this(xxx)访问本类中的其他构造方法

发布了34 篇原创文章 · 获赞 7 · 访问量 1306

猜你喜欢

转载自blog.csdn.net/weixin_44257082/article/details/104363471