Java面向对象:构造方法、方法重载、this关键字

1.什么是对象

  • 程序是为了模拟现实世界,解决现实问题而使用计算机语言编写的指令集和。

  • 现实世界是由无数个"对象"组成。

  • 万物皆对象。任何对象,都由自己的特征和行为。

    • 特征:称之为属性,一般为名词,代表对象有什么。

    • 行为:称之为方法,一般为动词,代表对象能做什么。

  • 分析一个对象有什么?(手机:属性)

    • 颜色、品牌、价格、星号、重量、尺寸、材质
  • 分析一个对象能做什么?(手机:方法)

    • 打电话、发短信、拍照、上网
  • 程序中的对象

    • 来自于模板(类)创造出来程序中的实体(对象)。

2.类与对象的关系

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

  • 对象:拥有多个特征和行为的实体,对象是类的实例

public class TestOOP {
      public static void main(String[] args) {
            // 1.创建dog类型的对象,并保存在dog1变量中
            Dog dog1 = new Dog();

            // 2.赋值属性:为各个属性赋值
            dog1.breed = "金毛";
            dog1.age = 5;
            dog1.sex = "公";
            dog1.furcolor = "黄色";

            // 3.访问属性:从各个属性中取值
            System.out.println(dog1.breed);
            System.out.println(dog1.age);
            System.out.println(dog1.sex);
            System.out.println(dog1.furcolor);

            // 4.调用对象的方法
            dog1.eat();
            dog1.sleep();
      }
}
class Dog {

      // 属性 - 实例变量
      String breed; // 品种
      int age; // 年龄
      String sex; // 性别
      String furcolor; // 毛色

      // 方法 - 实例函数
      public void eat() {
            // TODO Auto-generated method stub
            System.out.println("eat...");
      }

      public void sleep() {
            // TODO Auto-generated method stub
            System.out.println("sleep...");
      }
}

3.实例变量与局部变量

  • 属性、实例变量、成员变量,三者等价

  • 实例方法、成员方法,二者等价

  • reference - 引用、句柄、指针

实例变量与局部变量

4.方法重载

  • 方法重载(Overload):一个类中定义多个相同名称的方法

  • 到底采用哪种形式,需要取决于调用者给定的方法的参数

  • 要求:

    • 方法名称相同

    • 参数列表不同(类型、个数、顺序)

    • 与访问修饰符、返回值类型、形参的名称均无关

  • 调用带有重载的方法时,需要根据传入的参数去找到对应的方法

  • 好处:屏蔽使用差异,方便、灵活。

/**
* @author Jerry
* 验证构造方法的重载
*/
public class TestConstratorOverload {
      public static void main(String[] args) {
            new Teacher();

            new Teacher("Jared");

            new Teacher("Marry", 20);
      }
}

class Teacher {
      String name;
      int age;
      char sex;
      double salary;

      public Teacher() {
            System.out.println("---Teacher()---");
      }

      public Teacher(String name) {
            System.out.println("---Teacher(" + name + ")---");
      }

      public Teacher(String name, int age) {
            System.out.println("---Teacher(" + name + ", " + age +  ")---");
      }
}
输出:
---Teacher()---
---Teacher(Jared)---
---Teacher(Marry, 20)---

5.构造方法

  • 构造方法(Constructor):类中的特殊方法,主要用于创建对象

  • 要求:

    • 名称与类名完全相同(包括大小写)

    • 没有返回值类型修饰符(void也没有)

    • 创建对象时触发构造方法的调用,不可通过.访问符访问

  • 对象创建的过程:

    • 内存堆区中开辟对象空间

    • 为各个属性赋予初始值(默认0 / 0.0 / null)

    • 执行构造方法中的代码

    • [将对象的地址赋值给变量]

  • 构造方法也可以重载,遵循重载规则

  • 【注意】

    • 如果没有显示定义构造方法,编译器会默认提供一个无参构造方法

    • 如果显示定义了有参构造方法,则无参构造方法必须也要显示定义

    • 没有public声明的构造函数,在非同包中不能被访问

public class TestConstructor {
      public static void main(String[] args) {
            // 无参构造 - test
            Student stu1 = new Student();
            System.out.println(stu1.name + " " + stu1.age + " " +  stu1.sex + " " + stu1.score);

            // 有参构造 - test
            Student stu2 = new Student("tom", 20, '男', 99.0);
            System.out.println(stu2.name + " " + stu2.age + " " +  stu2.sex + " " + stu2.score);

            stu1.siHay();
      }
}
class Student {
      String name;
      int age;
      char sex;
      double score;

      // 无参构造方法
      public Student() {
            System.out.println("--- Student() ---");
      }

      // 有参构造方法
      public Student(String n, int a, char s, double sc) {
            name = n;
            age = a;
            sex = s;
            score = sc;
            System.out.println("--- 有参构造函数被执行 ---");
      }

      public void siHay() {
            System.out.println("Hi~~~");
      }
}
输出:
--- Student() ---
null 0 0.0
--- 有参构造函数被执行 ---
tom 20 男 99.0
Hi~~~

6.this关键字

  • this是类中的默认引用,代表当前实例(当前对象)。

  • this关键字的三种用法:

    • 调用实例属性、实例方法,eg:this.name、this.sayHi()

    • 调用本类中的其他构造方法,eg:this()、this(实参)

      • this([实参])必须在构造方法的首行,仅可在构造方法中使用
    • 表示当前方法

  • 默认情况下,实例属性和方法前的this.隐式存在

public class TestThisKeyword2 {
      public static void main(String[] args) {
            Teacher t1 = new Teacher("Jerry", 30, '男', 15000.0);
            System.out.println(t1.name);
            System.out.println(t1.age);
            System.out.println(t1.sex);
            System.out.println(t1.salary);
      }
}

class Teacher {
      String name;
      int age;
      char sex;
      double salary;

      public Teacher() {}

      public Teacher(String name, int age, char sex) {
            this.name = name;
            this.age = age;
            this.sex = sex;

            System.out.println("3参构造执行完毕!");
      }

      public Teacher(String name, int age, char sex, double salary) {
            //this.name = name;
            //this.age = age;
            //this.sex = sex;
            this(name, age, sex);
            this.salary = salary;
            System.out.println("4参构造执行完毕!!");
      }
}
输出:
3参构造执行完毕!
4参构造执行完毕!!
Jerry
30
男
15000.0
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,983评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,354评论 3 403
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,216评论 0 367
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,061评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,073评论 6 400
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,541评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,906评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,881评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,428评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,460评论 3 346
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,578评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,176评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,913评论 3 339
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,348评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,490评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,142评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,650评论 2 366

推荐阅读更多精彩内容