今日内容介绍
1、构造方法
2、this关键字
3、super关键字
4、综合案例

01构造方法引入

  • A:构造方法的引入
    1. 在开发中经常需要在创建对象的同时明确对象的属性值,
    2. 比如员工入职公司就要明确他的姓名、年龄等属性信息。
    3. 那么,创建对象就要明确属性值,那怎么解决呢?也就是在创建对象的时候就要做的事情,
    4. 当使用new关键字创建对象时,怎么给对象的属性初始化值呢?
    5. 这就要学习Java另外一门小技术,构造方法。
  • B: 那什么是构造方法呢?
    1. 从字面上理解即为构建创造时用的方法,即就是对象创建时要执行的方法。既然是对
    2. 象创建时要执行的方法,那么只要在new对象时,
    3. 知道其执行的构造方法是什么,就可以在执行这个方法的时候给对象进行属性赋值。

02构造方法作用

  • A: 构造方法的作用:
    1. new的同时给成员变量赋值,给对象属性进行初始化。
  • B: 举例:
    1. Perons p = new Person("张三",23); new 的时候给p对象的name属性和age属性进行赋值,使这个对象的属性有值。

03构造方法的定义和运行特点

  • A: 构造方法定义
    1. 构造方法的格式:
    2. 修饰符 构造方法名(参数列表)
    3. {
    4. }
  • B: 构造方法的体现:
    1. 构造方法没有返回值类型。也不需要写返回值。因为它是为构建对象的,对象创建完,方法就执行结束。
    2. 构造方法名称必须和类型保持一致。
    3. 构造方法没有具体的返回值。
    4. 构造方法的代码体现:
  • C: 构造方法举例
    1. class Person {
    2. // Person的成员属性age和name
    3. private int age;
    4. private String name;
    5. // Person的构造方法,拥有参数列表
    6. Person(int a, String nm) {
    7. // 接受到创建对象时传递进来的值,将值赋给成员属性
    8. age = a;
    9. name = nm;
    10. }
    11. }
  • D: 构造方法运行特点:
    1. new 对象的时候自动调用执行。

04默认添加的构造方法

  • A: 每一class类都必须有一个构造方法,构造方法不写也有。
  • 编译的时候,javac,系统会自动检查类中是否有构造方法,如果没有编译器就会自动添加一个构造方法
    比如Person类, 编译器添加一个无参构造 public Person(){}

05构造方法的调用赋值

  • A: 理解构造方法的格式和基本功能之后,现在就要研究构造方法是怎么执行的呢?在创建对象的时候是如何初始化的呢?
  • 构造方法是专门用来创建对象的,也就是在new对象时要调用构造方法。现在来看看如何调用构造方法。

  • B: 案例
    1. class Person {
    2. // Person的成员属性age和name
    3. private int age;
    4. private String name;
    5. // Person的构造方法,拥有参数列表
    6. Person(int a, String nm) {
    7. // 接受到创建对象时传递进来的值,将值赋给成员属性
    8. age = a;
    9. name = nm;
    10. }
    11. public void speak() {
    12. System.out.println("name=" + name + ",age=" + age);
    13. }
    14. }
    15. class PersonDemo {
    16. public static void main(String[] args) {
    17. // 创建Person对象,并明确对象的年龄和姓名
    18. Person p2 = new Person(23, "张三");
    19. p2.speak();
    20. }
    21. }

    上述代码演示了创建对象时构造方法的调用。即在创建对象时,会调用与参数列表对应的构造方法

06构造方法的内存

A:内存加载的过程

  1. 有一个Person类, 创建Person 对象new Person()
  2. 1、首先会将main方法压入栈中,执行main方法中的 new Person(23,"张三");
  3. 2、在堆内存中分配一片区域,用来存放创建的Person对象,这片内存区域会有属
  4. 于自己的内存地址(0x88)。然后给成员变量进行默认初始化(name=nullage=0)。
  5. 3、执行构造方法中的代码(age = a ; name = nm;),将变量a对应的23赋值给age,将变
  6. nm对应的”张三赋值给name,这段代码执行结束后,成员变量agename的值已经改变。
  7. 执行结束之后构造方法弹栈,Person对象创建完成。将Person对象的内存地址0x88赋值给p2

07构造方法的重载

  • A:当在描述事物时,要不要在类中写构造方法呢?这时要根据描述事物的特点来确定,当描述的事物在创建其对象时就要明确属性的值,这时就需要在定义类的时候书写带参数的构造方法。
  • 若创建对象时不需要明确具体的数据,这时可以不用书写构造方法(不书写也有默认的构造方法)。
  • 构造方法的细节:
    1、一个类中可以有多个构造方法,多个构造方法是以重载的形式存在的
    2、构造方法是可以被private修饰的,作用:其他程序无法创建该类的对象。
  • B: 举例

    1. class Person {
    2. private int age;
    3. private String name;
    4. // 私有无参数的构造方法,即外界不能通过new Person();语句创建本类对象
    5. private Person() {
    6. }
    7. // 多个构造方法是以重载的形式存在
    8. Person(int a) {
    9. age = a;
    10. }
    11. Person(String nm, int a) {
    12. name = nm;
    13. age = a;
    14. }
    15. }

08构造方法和一般方法区别

  1. * A: 目前为止,学习两种方法,分别为构造方法和一般方法,那么他们之间有什么异同呢?
  2. *
  3. 1.格式不同
  4. 构造方法 : 修饰符 类名(参数类型 参数 ...){
  5. 初始化成员变量
  6. }
  7. 一般方法: 需要有返回值类型
  8. 2.作用不同
  9. 构造方法一般用来给成员变量初始化;
  10. 一般方法根据需求而定;
  11. 3.调用方式不同
  12. 构造方法创建对象时调用, 或者this() super() 语句调用
  13. 普通方法需要对象调用或者静态方法直接调用静态方法.
  14. 4.执行不同
  15. 构造方法在对象创建时就执行了,而且只执行一次。
  16. 一般方法是在对象创建后,需要使用时才被对象调用,并可以被多次调用。

09this在构造方法之间的调用

  • A: 在之前学习方法之间调用时,可以通过方法名进行调用。可是针对构造方法,无法通过构造方法名来相互调用。
    构造方法之间的调用,可以通过this关键字来完成。
    构造方法调用格式:
    this(参数列表);

  • B:调用构造方法的案例
    1. class Person {
    2. // Person的成员属性
    3. private int age;
    4. private String name;
    5. // 无参数的构造方法
    6. Person() {
    7. }
    8. // 给姓名初始化的构造方法
    9. Person(String nm) {
    10. name = nm;
    11. }
    12. // 给姓名和年龄初始化的构造方法
    13. Person(String nm, int a) {
    14. // 由于已经存在给姓名进行初始化的构造方法 name = nm;因此只需要调用即可
    15. // 调用其他构造方法,需要通过this关键字来调用
    16. this(nm);
    17. // 给年龄初始化
    18. age = a;
    19. }
    20. }

10this在构造方法调用的内存图

  • A: 被加载的代码
    class Person {
    private int age;
    private String name;

    1. Person() {
    2. }
    3. Person(String nm) {
    4. name = nm;
    5. }
    6. Person(String nm, int a) {
    7. this(nm);
    8. age = a;
    9. }
    10. }
    11. class PersonDemo {
    12. public static void main(String[] args) {
    13. Person p = new Person("张三", 23);
    14. }
    15. }
  • B: 构造方法调用的原理图
    • 1、先执行main方法,main方法压栈,执行其中的new Person(“张三”,23);

      2、堆内存中开辟空间,并为其分配内存地址0x33,,紧接着成员变量默认初始化(name=null age = 0);

      3、拥有两个参数的构造方法(Person(String nm , int a))压栈,在这个构造方法中有一个隐式的this,因为构造方法是给对象初始化的,那个对象调用到这个构造方法,this就指向堆中的那个对象。

      4、由于Person(String nm , int a)构造方法中使用了this(nm);构造方法Person(String nm)就会压栈,并将“张三”传递给nm。在Person(String nm , int a)构造方法中同样也有隐式的this,this的值同样也为0x33,这时会执行其中name = nm,即把“张三”赋值给成员的name。当赋值结束后Person(String nm , int a)构造方法弹栈。

      5、程序继续执行构造方法(Person(String nm , int a)中的age = a;这时会将23赋值给成员属性age。赋值结束构造方法(Person(String nm , int a)弹栈。

      6、当构造方法(Person(String nm , int a)弹栈结束后,Person对象在内存中创建完成,并将0x33赋值给main方法中的p引用变量。

      注意:

      this到底代表什么呢?this代表的是对象,具体代表哪个对象呢?哪个对象调用了this所在的方法,this就代表哪个对象。
      调用其他构造方法的语句必须定义在构造方法的第一行,原因是初始化动作要最先执行。

11this简易应用

  1. * A: 当在方法中出现了局部变量和成员变量同名的时候,那么在方法中怎么区别局部变
  2. * 量成员变量呢?可以在成员变量名前面加上this.来区别成员变量和局部变量
  3. *
  4. * B: 举例1
  5. *
  6. class Person {
  7. private int age;
  8. private String name;
  9. // 给姓名和年龄初始化的构造方法
  10. Person(String name, int age) {
  11. // 当需要访问成员变量是,只需要在成员变量前面加上this.即可
  12. this.name = name;
  13. this.age = age;
  14. }
  15. public void speak() {
  16. System.out.println("name=" + this.name + ",age=" + this.age);
  17. }
  18. }
  19. class PersonDemo {
  20. public static void main(String[] args) {
  21. Person p = new Person("张三", 23);
  22. p.speak();
  23. }
  24. }
  25. * C: 举例2
  26. 学习完了构造方法、this的用法之后,现在做个小小的练习。
  27. 需求:在Person类中定义功能,判断两个人是否是同龄人
  28. class Person {
  29. private int age;
  30. private String name;
  31. // 给姓名和年龄初始化的构造方法
  32. Person(String name, int age) {
  33. // 当需要访问成员变量是,只需要在成员变量前面加上this.即可
  34. this.name = name;
  35. this.age = age;
  36. }
  37. public void speak() {
  38. System.out.println("name=" + this.name + ",age=" + this.age);
  39. }
  40. // 判断是否为同龄人
  41. public boolean equalsAge(Person p) {
  42. // 使用当前调用该equalsAge方法对象的age和传递进来p的age进行比较
  43. // 由于无法确定具体是哪一个对象调用equalsAge方法,这里就可以使用this来代替
  44. /*
  45. * if(this.age == p.age) { return true; } return false;
  46. */
  47. return this.age = p.age;
  48. }
  49. }

12super关键字_1

  • A: 子父类中构造方法的调用

    1. 在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super();语句。
  • B: 格式:
    1. 调用本类中的构造方法
    2. this(实参列表);
    3. 调用父类中的空参数构造方法
    4. super();
    5. 调用父类中的有参数构造方法
    6. super(实参列表);

13super关键字_2

  • A:子类构造方法,有一个默认添加的构造方法
    1. public class Student extends Person {
    2. public Student(){
    3. super();
    4. }
    5. }
  • B :为什么子类对象创建都要访问父类中的构造方法?因为子类继承了父类的内容,所以创建对象时,必须要先看父类是如何对其内容进行初始化的,看如下程序
    1. public class Test {
    2. public static void main(String[] args) {
    3. new Zi();
    4. }
    5. }
    6. class Fu{
    7. int num ;
    8. Fu(){
    9. System.out.println("Fu构造方法"+num);
    10. num = 4;
    11. }
    12. }
    13. class Zi extends Fu{
    14. Zi(){
    15. //super(); 调用父类空参数构造方法
    16. System.out.println("Zi构造方法"+num);
    17. }
    18. }

    1. 执行结果:

       Fu构造方法0
       Zi构造方法4
    ***
    通过结果发现,子类构造方法执行时中,调用了父类构造方法,这说明,子类构造方法中有一句super()。

    1. 那么,子类中的构造方法为什么会有一句隐式的super()呢?
    2. 原因:子类会继承父类中的内容,所以子类在初始化时,必须先到父类中去
    3. 执行父类的初始化动作。这样,才可以使用父类中的内容。
    4. 当父类中没有空参数构造方法时,子类的构造方法必须有显示的super语句,指定要访问的父类有参数构造方法。

14子类父类的内存图

15super关键字_3

  • A: 创建子类对象的时候会必须调用父类的构造方法。
    1. 子类默认会调用父类的无参构造, 但如果父类没有无参构造,子类的构造方法继续调用父类的无参构造就会报错。
    2. 因此子类构造方法的第一行需要调用父类的构造方法,既可以调用父类的无参构造,也可以调用父类的有参构造,这样语法上就不会报错。

16super关键字_4

  1. * A: 构造方法第一行,写this()还是super()
  2. * this() 是调用本类的构造方法,super()是调用父类的构造方法, 且两条语句不能同时存在
  3. * 保证子类的所有构造方法调用到父类的构造方法即可
  4. * B: 小结:
  5. * 无论如何,子类的所有构造方法,直接或间接必须调用到父类构造方法;
  6. * 子类的构造方法什么都不写,默认的构造方法第一行super()

17创建子类对象过程的细节

  1. * A 创建子类对象过程的细节
  2. * 如果子类的构造方法第一行写了this调用了本类其他构造方法,那么super调用父类的语句还有吗?
  3. * 这时是没有的,因为this()或者super(),只能定义在构造方法的第一行,因为初始化动作要先执行。
  4. * 父类构造方法中是否有隐式的super呢?
  5. * 也是有的。记住:只要是构造方法默认第一行都是super();
  6. * 父类的父类是谁呢?super调用的到底是谁的构造方法呢?
  7. * Java体系在设计,定义了一个所有对象的父类Object
  8. * 注意:
  9. 类中的构造方法默认第一行都有隐式的super()语句,在访问父类中的空参数构造方法。
  10. 所以父类的构造方法既可以给自己的对象初始化,也可以给自己的子类对象初始化。
  11. 如果默认的隐式super()语句在父类中没有对应的构造方法,那么必须在构造方法中通过\
  12. this或者super的形式明确要调用的构造方法。

18super的应用

  1. * A: 练习:描述学生和工人这两个类,将他们的共性nameage抽取出来存放在父类中,并提供相应的getset方法,同时需要在创建学生和工人对象就必须明确姓名和年龄
  2. * 案例:
  3. //定义Person类,将Student和Worker共性抽取出来
  4. class Person {
  5. private String name;
  6. private int age;
  7. public Person(String name, int age) {
  8. // super();
  9. this.name = name;
  10. this.age = age;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. public int getAge() {
  19. return age;
  20. }
  21. public void setAge(int age) {
  22. this.age = age;
  23. }
  24. }
  25. class Student extends Person {
  26. // Student类的构造方法
  27. Student(String name, int age) {
  28. // 使用super关键字调用父类构造方法,进行相应的初始化动作
  29. super(name, age);
  30. }
  31. public void study() {// Studnet中特有的方法
  32. System.out.println(this.getName() + "同学在学习");
  33. }
  34. }
  35. class Worker extends Person {
  36. Worker(String name, int age) {
  37. // 使用super关键字调用父类构造方法,进行相应的初始化动作
  38. super(name, age);
  39. }
  40. public void work() {// Worker 中特有的方法
  41. System.out.println(this.getName() + "工人在工作");
  42. }
  43. }
  44. public class Test {
  45. public static void main(String[] args) {
  46. Student stu = new Student("小明",23);
  47. stu.study();
  48. Worker w = new Worker("小李",45);
  49. w.work();
  50. }
  51. }

19完整员工案例分析

  • A: 项目介绍
    1. IT公司有多名员工,按照员工负责的工作不同,进行了部门的划分(研发部员工、维护部员工)。
    2. 研发部根据所需研发的内容不同,又分为JavaEE工程师、Android工程师;维护部根据所需维护
    3. 的内容不同,又分为网络维护工程师、硬件维护工程师。
    4. 公司的每名员工都有他们自己的员工编号、姓名,并要做它们所负责的工作。
    5. 工作内容
    6. JavaEE工程师:员工号为xxx xxx员工,正在研发淘宝网站
    7. Android工程师:员工号为xxx xxx员工,正在研发淘宝手机客户端软件
    8. 网络维护工程师:员工号为xxx xxx员工,正在检查网络是否畅通
    9. 硬件维护工程师:员工号为xxx xxx员工,正在修复打印机
    10. 请根据描述,完成员工体系中所有类的定义,并指定类之间的继承关系。进行XX工程师类的对象创建,完成工作方法的调用。
  • B: 案例分析
    1. 根据上述部门的描述,得出如下的员工体系图
    2. 根据员工信息的描述,确定每个员工都有员工编号、姓名、要进行工作。则,
    3. 把这些共同的属性与功能抽取到父类中(员工类),关于工作的内容由具体的工程师来进行指定。
    4. 工作内容
    5. JavaEE工程师:员工号为xxx xxx员工,正在研发淘宝网站
    6. Android工程师:员工号为xxx xxx员工,正在研发淘宝手机客户端软件
    7. 网络维护工程师:员工号为xxx xxx员工,正在检查网络是否畅通
    8. 硬件维护工程师:员工号为xxx xxx员工,正在修复打印机
    9. 创建JavaEE工程师对象,完成工作方法的调用

20案例代码实现

  • A:定义员工类(抽象类)
    1. public abstract class Employee {
    2. private String id;// 员工编号
    3. private String name; // 员工姓名
    4. //空参数构造方法
    5. public Employee() {
    6. super();
    7. }
    8. //有参数构造方法
    9. public Employee(String id, String name) {
    10. super();
    11. this.id = id;
    12. this.name = name;
    13. }
    14. public String getId() {
    15. return id;
    16. }
    17. public void setId(String id) {
    18. this.id = id;
    19. }
    20. public String getName() {
    21. return name;
    22. }
    23. public void setName(String name) {
    24. this.name = name;
    25. }
    26. //工作方法(抽象方法)
    27. public abstract void work();
    28. }
  • B : 定义研发部员工类Developer 继承 员工类Employee
    1. public abstract class Developer extends Employee {
    2. //空参数构造方法
    3. public Developer() {
    4. super();
    5. }
    6. //有参数构造方法
    7. public Developer(String id, String name) {
    8. super(id, name);
    9. }
    10. }
  • C: 定义维护部员工类Maintainer 继承 员工类Employee
    1. public abstract class Maintainer extends Employee {
    2. //空参数构造方法
    3. public Maintainer() {
    4. super();
    5. }
    6. //有参数构造方法
    7. public Maintainer(String id, String name) {
    8. super(id, name);
    9. }
    10. }
  • D: 定义JavaEE工程师 继承 研发部员工类,重写工作方法
    1. public class JavaEE extends Developer {
    2. //空参数构造方法
    3. public JavaEE() {
    4. super();
    5. }
    6. //有参数构造方法
    7. public JavaEE(String id, String name) {
    8. super(id, name);
    9. }
    10. @Override
    11. public void work() {
    12. System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在研发淘宝网站");
    13. }
    14. }
  • E: 定义Android工程师 继承 研发部员工类,重写工作方法
    1. public class Android extends Developer {
    2. //空参数构造方法
    3. public Android() {
    4. super();
    5. }
    6. //有参数构造方法
    7. public Android(String id, String name) {
    8. super(id, name);
    9. }
    10. @Override
    11. public void work() {
    12. System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在研发淘宝手机客户端软件");
    13. }
    14. }
  • F: 定义Network网络维护工程师 继承 维护部员工类,重写工作方法
    1. public class Network extends Maintainer {
    2. //空参数构造方法
    3. public Network() {
    4. super();
    5. }
    6. //有参数构造方法
    7. public Network(String id, String name) {
    8. super(id, name);
    9. }
    10. @Override
    11. public void work() {
    12. System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在检查网络是否畅通");
    13. }
    14. }
  • G: 定义Hardware硬件维护工程师 继承 维护部员工类,重写工作方法
    1. public class Hardware extends Maintainer {
    2. //空参数构造方法
    3. public Hardware() {
    4. super();
    5. }
    6. //有参数构造方法
    7. public Hardware(String id, String name) {
    8. super(id, name);
    9. }
    10. @Override
    11. public void work() {
    12. System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在修复打印机");
    13. }
    14. }
  • H: 在测试类中,创建JavaEE工程师对象,完成工作方法的调用
    1. public class Test {
    2. public static void main(String[] args) {
    3. //创建JavaEE工程师员工对象,该员工的编号000015,员工的姓名 小明
    4. JavaEE ee = new JavaEE("000015", "小明");
    5. //调用该员工的工作方法
    6. ee.work();
    7. }
    8. }

作业测试

1、构造方法的格式是什么?有哪些注意事项?
权限修饰符 类名(参数列表){方法体}

2、构造方法可以重载吗? 里边可以有return语句吗?
可以重载 可以有return但不能有返回值

3、给成员变量赋值有几种方式?有什么区别?
get/set
直接赋值
带参构造器赋值
初始化
static 代码块赋值
默认构造器赋值

4.编写一个完整的Person类,使用this关键字给成员变量进行赋值.
在测试类中测试
代码:

  1. public class HomeWork {
  2. public static void main(String[] args) {
  3. Person p = new Person();
  4. p.run();
  5. System.out.println(p.getAge());
  6. System.out.println(p.getName());
  7. }
  8. }
  9. class Person {
  10. private int age;
  11. private String name;
  12. public int getAge() {
  13. return age;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void run() {
  19. this.age = 10;
  20. this.name = "边天旭";
  21. }
  22. }

5、根据需求,完成如下代码(按照标准格式写),并在测试类中进行测试。

  1. 标准格式包含: 私有属性 无参构造 有参构造 setter getter 需求中的方法
  2. 需求一:
  3. 员工类Employee
  4. 属性:姓名name,工号id,工资salary
  5. 行为:显示所有成员信息的方法show()

代码:

  1. class Employee {
  2. private String name;
  3. private String id;
  4. private double salary;
  5. public Employee() {
  6. super();
  7. // TODO Auto-generated constructor stub
  8. }
  9. public Employee(String name, String id, double salary) {
  10. super();
  11. this.name = name;
  12. this.id = id;
  13. this.salary = salary;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public String getId() {
  22. return id;
  23. }
  24. public void setId(String id) {
  25. this.id = id;
  26. }
  27. public double getSalary() {
  28. return salary;
  29. }
  30. public void setSalary(double salary) {
  31. this.salary = salary;
  32. }
  33. public void show() {
  34. System.out.println("姓名:" + this.name);
  35. System.out.println("工号:" + this.id);
  36. System.out.println("工资:" + this.salary);
  37. }
  38. }

  1. 需求二:
  2. 动物类Animal
  3. 属性:姓名name,年龄age
  4. 行为:吃饭eat,睡觉sleep

代码:

  1. class Animal {
  2. private String name;
  3. private int age;
  4. public String getName() {
  5. return name;
  6. }
  7. public void setName(String name) {
  8. this.name = name;
  9. }
  10. public int getAge() {
  11. return age;
  12. }
  13. public void setAge(int age) {
  14. this.age = age;
  15. }
  16. public Animal(String name, int age) {
  17. super();
  18. this.name = name;
  19. this.age = age;
  20. }
  21. public Animal() {
  22. super();
  23. }
  24. public void eat() {
  25. System.out.println("动物吃饭");
  26. }
  27. public void sleep() {
  28. System.out.println("动物睡觉");
  29. }
  30. }
  31. 需求三:
  32. 人类Person
  33. 属性:姓名name,年龄age,性别gender
  34. 行为:学习study,睡觉sleep

代码:

  1. class person {
  2. private String name;
  3. private int age;
  4. private char gender;
  5. public person() {
  6. super();
  7. // TODO Auto-generated constructor stub
  8. }
  9. public person(String name, int age, char gender) {
  10. super();
  11. this.name = name;
  12. this.age = age;
  13. this.gender = gender;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public int getAge() {
  22. return age;
  23. }
  24. public void setAge(int age) {
  25. this.age = age;
  26. }
  27. public char getGender() {
  28. return gender;
  29. }
  30. public void setGender(char gender) {
  31. this.gender = gender;
  32. }
  33. public void study() {
  34. System.out.println("学生学习");
  35. }
  36. public void sleep() {
  37. System.out.println("学生睡觉");
  38. }
  39. }

12_Java面向对象_第12天(构造方法、this、super)_讲义的更多相关文章

  1. [.net 面向对象程序设计进阶] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化

    [.net 面向对象程序设计进阶] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化 本节导读: 介绍JSON的结构,在JS中的使用.重点说明JSON如何在.N ...

  2. [.net 面向对象编程基础] (12) 面向对象三大特性——继承

    [.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...

  3. 方法引用_通过this引用本类的成员方法和方法引用_类的构造器(构造方法)引用和数组的构造器引用

    package com.yang.Test.ThisMethodReference; /** * 通过this引用本类的成员方法 */ public class Husband { //定义一个买房子 ...

  4. 二、多线程基础-乐观锁_悲观锁_重入锁_读写锁_CAS无锁机制_自旋锁

    1.10乐观锁_悲观锁_重入锁_读写锁_CAS无锁机制_自旋锁1)乐观锁:就像它的名字一样,对于并发间操作产生的线程安全问题持乐观状态,乐观锁认为竞争不总是会发生,因此它不需要持有锁,将 比较-设置 ...

  5. loto仪器_如何模拟输出凸轮轴和曲轴波形_用任意波形信号源SIG852?

    loto仪器_如何模拟输出凸轮轴和曲轴波形_用任意波形信号源SIG852? 在汽车传感器的波形检测应用中,有时候需要模拟各种汽车传感器的输出信号,用来驱动和监测对应的执行机构或者电路是否正常,这其中, ...

  6. 构造方法 this super

    1 构造方法 1.1 构造方法Constructor概述创建对象要明确属性值,此时需要用到构造方法,即对象创建时要执行的方法,用来给对象的属性进行初始化.在new对象时,知道其执行的构造方法是什么,就 ...

  7. S​Q​L​_​S​e​r​v​e​r​_​2​0​0​8​定​期​自​动​备​份​详​细​图​解

    S​Q​L​_​S​e​r​v​e​r​_​2​0​0​8​定​期​自​动​备​份​详​细​图​解 设置自动数据库的定期备份计划. http://wenku.baidu.com/link?url=Tu ...

  8. cb19a_c++_只适合string类型的操作_提取_追加_替换

    *cb19a_c++_只适合string类型的操作_提取_追加_替换三个substr重载函数-获取一个字符串的一部分六个append重载函数-追加字符十个replace重载函数-替换更换 重载函数越多 ...

  9. Java入门姿势【面向对象3】构造方法及其重载_方法的调用

    上次我为大家写出啦"定义类与创建对象_了解局部变量",上篇文章代码可能较多,如没有了解透彻的话请打开下方文章在进行观看一下哦!! [Java入门姿势[面向对象2]定义类与创建对象_ ...

随机推荐

  1. 通过yum安装MySQL5.7.4

    1,进入yum的repo文件夹 cd /etc/yum.repos.d 2,mysql主页已经提供了centos等系统需要的rpm文件,直接去主页下载. 我用的centos6.5,选择Red Hat ...

  2. 数据结构与算法之链表(LinkedList)——简单实现

    这一定要mark一下.虽然链表的实现很简单,且本次只实现了一个方法.但关键的是例子:单向链表的反转.这是当年我去H公司面试时,面试官出的的题目,而当时竟然卡壳了.现在回想起来,还是自己的基本功不扎实, ...

  3. # 课下测试补交(ch01)20155337

    课下测试补交(ch01) 1.Amdahl定律说明,我们对系统的某个部分做出重大改进,可以显著获得一个系统的加速比.(B) A .正确 B .错误 解析:Amdahl定律,该定律的主要思想是,当我们对 ...

  4. mfc 类的const对象

    知识点 类的const对象 const类的成员函数 一. 类的const对象 const 意谓着只读 意谓着所标记的类成员变量不成出现在=号的左边. 构造函数除外. ,,); //比如在存放出生日期的 ...

  5. 【HNOI2013】游走

    题面 题解 图上的期望大部分是\(dp\),无向图的期望大部分是高斯消元 设\(f[i]\)表示走到点\(i\)的期望,\(d[i]\)表示\(i\)的度,\(to(i)\)表示\(i\)能到达的点集 ...

  6. Kubernetes学习之路(十七)之statefulset控制器

    目录 一.statefulset简介 二.为什么要有headless?? 三.为什么要 有volumeClainTemplate?? 四.statefulSet使用演示 (1)查看statefulse ...

  7. [SCOI2016]幸运数字 树链剖分,线性基

    [SCOI2016]幸运数字 LG传送门 为了快乐,我们用树剖写这题. 强行树剖,线段树上每个结点维护一个线性基,每次查询暴力合并. 瞎分析一波复杂度:树剖两点之间\(\log n\)条重链,每条重链 ...

  8. P4198 楼房重建

    P4198 楼房重建 集中写博客= = 首先把高度变成斜率 然后就比较玄学了,首先用线段树维护一个区间的斜率最大值,和只看这个区间时能看见的楼房个数ans 然后更新时先更新max,再处理神奇的ans ...

  9. python-flask-ssti(模版注入漏洞)

    SSTI(Server-Side Template Injection) 服务端模板注入 ,就是服务器模板中拼接了恶意用户输入导致各种漏洞.通过模板,Web应用可以把输入转换成特定的HTML文件或者e ...

  10. vue处理循环列表动态数据问题

    调用方法:Vue.set( target, key, value ) target:要更改的数据源(可以是对象或者数组) key:要更改的具体数据 value :重新赋的值 <!DOCTYPE ...