我是靠谱客的博主 想人陪音响,最近开发中收集的这篇文章主要介绍学习Java第十一天--面向对象之方法重载、构造方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

方法重载的概念、构造方法的概念和基本使用方法、面向对象的总结

    • 7.4 方法重载
      • 7.4.1 概念
      • 7.4.2 代码调错
    • 7.5 构造方法
      • 7.5.1 概念
      • 7.5.2 对象的创建过程
      • 7.5.3 构造方法重载
      • 7.5.4 默认构造方法
      • 7.5.5 构造方法为属性赋值
      • 7.5.6 this关键字
    • 7.6 总结

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)访问本类中的其他构造方法

最后

以上就是想人陪音响为你收集整理的学习Java第十一天--面向对象之方法重载、构造方法的全部内容,希望文章能够帮你解决学习Java第十一天--面向对象之方法重载、构造方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部