初识面向对象

1. 方法重载(Overload)

1.同一个类中 2.方法名称相同 3.参数列表不同 包括参数的个数、类型、顺序 有一个不同即可称之为不同 4.跟返回值、访问权限修饰符 无关

  1. package com.qfedu.test2;
  2. /**
  3. * 我们编写方法实现计算机加法功能
  4. *
  5. * 方法重载:
  6. * 1.同一个类中
  7. * 2.方法名称相同
  8. * 3.参数列表不同 包括参数的个数、类型、顺序 有一个不同即可称之为不同
  9. * 4.跟返回值、访问权限修饰符 无关
  10. *
  11. * @author WHD
  12. *
  13. */
  14. public class Test1 {
  15. public int add(int a ,String str) {
  16. return 1;
  17. }
  18. public int add(String str , int a) {
  19. return 0;
  20. }
  21. public int add(int a,int b) {
  22. return a + b;
  23. }
  24. public int add(int a,int b,int c) {
  25. return a + b + c;
  26. }
  27. public int add(int a,int b,int c,int d) {
  28. return a + b + c + d;
  29. }
  30. public int add(int a,int b,int c,int d,int e) {
  31. return a + b + c + d + e;
  32. }
  33. public int add(int a,int b,int c,int d,int e,int f) {
  34. return a + b + c + d + e + f;
  35. }
  36. public static void main(String[] args) {
  37. Test1 t1 = new Test1();
  38. t1.add(10, 20, 30);
  39. System.out.println(t1.add(10, 20));
  40. }
  41. }

2. 构造方法

2.1 概念

构建 创造 用于创建对象的特殊方法 不能通过.调用 只能在创建对象的时候调用 默认调用无参构造 构造方法书写格式:访问修饰符 + 类名(形参列表){} 普通方法书写格式:访问修饰符 + 返回值类型 + 方法名称(形参列表){}

2.2 无参构造

无参构造是默认存在 不管是否书写都有

  1. package com.qfedu.test3;
  2. /**
  3. * 构造方法:构建 创造 用于创建对象的特殊方法 不能通过.调用 只能在创建的对象的时候调用
  4. * 构造方法书写格式:访问修饰符 + 类名(形参列表){}
  5. * 普通方法书写格式:访问修饰符 + 返回值类型 + 方法名称(形参列表){}
  6. *
  7. * 无参构造是默认存在 不管是否书写都有
  8. * @author WHD
  9. *
  10. */
  11. public class Student {
  12. String name;
  13. int age;
  14. String gradeName;
  15. String hobby;
  16. public void print() {
  17. System.out.println("名字" + name + ",年龄" + age + ",爱好" + hobby + ",班级" + gradeName);
  18. }
  19. public Student() {
  20. System.out.println("Student类无参构造执行了");
  21. }
  22. public static void main(String[] args) {
  23. Student stu1 = new Student();
  24. stu1.name = "赵四";
  25. stu1.age = 17;
  26. stu1.gradeName = "三年二班";
  27. stu1.hobby = "尬舞";
  28. }
  29. }

2.3 有参构造

我们在创建对象的同时,可以给属性赋值,使用有参构造 无参构造是默认存在 如果书写了有参构造 那么默认的无参将被覆盖 如果想要使用 显式的书写

  1. package com.qfedu.test3;
  2. /**
  3. * 我们在创建对象的同时,可以给属性赋值,使用有参构造
  4. * @author WHD
  5. *
  6. */
  7. public class Student {
  8. String name;
  9. int age;
  10. String gradeName;
  11. String hobby;
  12. public void print() {
  13. System.out.println("名字" + name + ",年龄" + age + ",爱好" + hobby + ",班级" + gradeName);
  14. }
  15. public Student() {
  16. System.out.println("Student类无参构造执行了");
  17. }
  18. public Student(String n,int a,String gname,String h) {
  19. name = n;
  20. age = a;
  21. gradeName = gname;
  22. hobby = h;
  23. }
  24. public Student(int a) {
  25. age = a;
  26. }
  27. public Student(String n,int a) {
  28. name = n;
  29. age = a;
  30. }
  31. public Student(int a,String n) {
  32. name = n;
  33. age = a;
  34. }
  35. public static void main(String[] args) {
  36. Student stu3 = new Student(20, "大拿");
  37. stu3.gradeName = "三年二班";
  38. stu3.hobby = "理财";
  39. stu3.print();
  40. Student stu2 = new Student("广坤", 15, "三年二班", "口技");
  41. stu2.print();
  42. }
  43. }

2.4 构造方法重载

与普通方法重载规则类似 构造方法都是类名,没有返回值,与访问权限无关 所以只要求,参数列表不同 参数的个数 类型 顺序

3. this关键字

this关键字 表示当前对象 this关键字适用场景: 1.访问属性 2.访问方法 3.访问构造方法 this访问构造方法必须在其他构造方法中的第一句 只能使用一次

  1. package com.qfedu.test6;
  2. /**
  3. * this关键字 表示当前对象
  4. * this关键字适用场景:
  5. * 1.访问属性
  6. * 2.访问方法
  7. * 3.访问构造方法 this访问构造方法必须在其他构造方法中的第一句 只能使用一次
  8. * @author WHD
  9. *
  10. */
  11. public class Student {
  12. String name;
  13. int age;
  14. String gradeName;
  15. String hobby;
  16. public void printName() {
  17. System.out.println("名字是" + name);
  18. }
  19. public void printAge() {
  20. System.out.println("年龄是" + age);
  21. }
  22. public void print() {
  23. printName();
  24. printAge();
  25. System.out.println("年龄" + age + ",爱好" + hobby + ",班级" + gradeName);
  26. }
  27. /**
  28. * 回顾之前写的构造方法 名称书写不规范 不符合见名知意的规则 所以我们将参数名称修改
  29. * 修改完以后 发现不能正常赋值了 因为使用的都是局部变量
  30. * @param name
  31. * @param age
  32. * @param hobby
  33. * @param gradeName
  34. */
  35. public Student(String name,int age,String hobby,String gradeName) {
  36. // this.name = name;
  37. // this(name);
  38. // this.age = age;
  39. // this(name, age);
  40. // this.hobby = hobby;
  41. this(name, age, hobby);
  42. this.gradeName = gradeName;
  43. }
  44. public Student(String name,int age,String hobby) {
  45. this(name, age);
  46. this.hobby = hobby;
  47. }
  48. public Student(String name,int age) {
  49. this(name);
  50. this.age = age;
  51. }
  52. public Student(String name) {
  53. this.name = name;
  54. }
  55. public Student() {}
  56. public static void main(String[] args) {
  57. Student stu1 = new Student("赵四",17,"尬舞","三年二班");
  58. stu1.print();
  59. }
  60. }