3.1_7 JavaSE入门 P6 【面向对象】概述封装

news/2024/10/30 1:41:30/

相关链接

  • Excel目录

目录

  • Part6 【面向对象】概述&封装
    • 1 面向对象概述
      • 1.1 面向对象思想
        • 1.1.1 面向过程思想与面向对象思想
        • 1.1.2 面向过程特点与面向对象特点
      • 1.2 类与对象概述
    • 2 对象的内存图
      • 2.1 一个对象的内存图
      • 2.2 两个对象的内存图(共用方法区)
      • 2.3 两个对象的内存图(两个引用指向同一个堆内存)
      • 2.4 成员变量和局部变量区别
    • 3 private、this关键字和封装
      • 3.1 private关键字的概述和特点
      • 3.2 private修饰后的标准类代码
      • 3.3 封装的概述和好处
      • 3.4 this关键字的概述和使用
    • 4 面向对象之构造方法
      • 4.1 构造方法的概述和使用
        • 4.1.1 构造方法作用概述
        • 4.1.2 构造方法格式
      • 4.2 构造方法的注意事项
    • 5 课后练习
      • 5.1 练习1 求长方形周长面积
      • 5.2 练习2 显示员工信息
      • 5.3 练习3 键盘录入学员信息并打印
      • 5.4 练习4 调用老师类和学生类的成员方法


Part6 【面向对象】概述&封装


1 面向对象概述


1.1 面向对象思想

  • 我们回想一下,前面我们完成一个需求的步骤:首先是搞清楚我们要做什么,然后在分析怎么做,最后我们再代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。
  • 在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。
  • 那么什么是面向过程开发呢? 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
  • 面向过程的代表语言:C语言
  • 当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始思索,能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的用一个类封装在一起,这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。

1.1.1 面向过程思想与面向对象思想

  • A:什么是面向过程

    • 面向过程,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
    • 例如:吃煎饼果子利用面向过程的思想:
      • 1.学习摊煎饼的技术
      • 2.买材料鸡蛋,油,葱等等
      • 3.开始摊
      • 4.吃
      • 5.收拾
  • B:什么是面向对象

    • 面向对象思想就是不断的创建对象,使用对象,指挥对象做事情。(如果有对象,直接用对象,对我们直接提供服务)
    • 例如:吃煎饼果子利用面向对象的思想
      • 1.找会摊煎饼的大妈(创建一个摊煎饼大妈的对象)
      • 2.调用其摊煎饼的技能(功能),传递进去钱参数
      • 3.返回给我们一个煎饼
      • 4.吃

1.1.2 面向过程特点与面向对象特点

  • A:面向过程:
    • 强调的是过程,所有事情都需要自己完成
  • B:面向对象:
    • 是一种更符合我们思想习惯的思想(懒人思想,我把事情自己不做,交给别人去做)
    • 可以将复杂的事情简单化(对使用者来说简单了,对象里面还是很复杂的)
    • 将我们从执行者变成了指挥者角色发生了转换

1.2 类与对象概述

  • A:我们学习编程是为了什么
    • 为了把我们日常生活中实物用学习语言描述出来
  • B:我们如何描述现实世界事物
    • 属性 就是该事物的描述信息(事物身上的名词)
    • 行为 就是该事物能够做什么(事物身上的动词)
  • C:Java中最基本的单位是类,Java中用class描述事物也是如此
    • 成员变量 就是事物的属性
    • 成员方法 就是事物的行为
  • D:定义类其实就是定义类的成员(成员变量和成员方法)
    • a:成员变量 和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外
    • b:成员方法 和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。
  • E:类和对象的概念
    • a:类:是一组相关的属性和行为的集合(我们班所有的同学都具备相同的属性和行为,比如:姓名,年龄,学习,这样就把所有的学生成为学生类)
    • b:对象:是该类事物的具体体现(说某个同学时,他都具备自己特有的属性和行为)
    • c:举例:
      • 学生
      • 对象 具体的某个学生就是一个对象
    • 比如:车是一个类,具体的开的奔驰、宝马,就是对象

案例代码一  类与对象案例 【1.a 学生类】

package com.groupies.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 学生类    案例** 类的定义:类是用来描述现实世界事物的* 事物:* 		属性* 		行为* 类如何和事物进行对应的呢?* 		类:* 			成员变量* 			成员方法** 成员变量:和我们学习过的变量的定义是一样的,有两个小区别。* 		位置不同:类中,方法外* 		初始化值:成员变量不需要给初始化值也可以使用,因为它有默认值* 成员方法:和我们学习过的方法的定义是一样的,有一个小区别。* 		去掉了修饰符中的static关键字** 需求:定义一个学生类。** 学生事物:* 		属性:姓名,年龄...* 		行为:学习,吃饭...** 学生类:* 		成员变量:姓名,年龄...* 		成员方法:学习,吃饭...*/
public class OperatorDemo1POJO {/*成员变量*///姓名String name;//年龄int age;/*成员方法*///学习的方法public void study() {System.out.println(name + " 好好学习,天天向上");}//吃饭的方法public void eat() {System.out.println(name + " 学习饿了要吃饭");}
}

案例代码一  类与对象案例 【1.b 学生类的测试类】

package com.groupies.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 学生类的测试类    类与对象案例** 类的使用:* 		使用一个类,其实就是使用该类的成员。(成员变量和成员方法)* 而我们要想使用一个类的成员,就必须先拥有该类的对象。* 那么我们如何拥有一个类的对象呢?* 		创建对象就可以了* 我们如何创建对象呢?* 		格式:* 			类名  对象名  = new 类名();* 对象如何访问成员呢?* 		成员变量:* 			对象名.成员变量* 		成员方法:* 			对象名.成员方法(...)*/
public class OperatorDemo1 {public static void main(String[] args) {//类型 对象名 = new 类名();OperatorDemo1POJO student = new OperatorDemo1POJO();//实例对象地址:student:com.groupies.day06.OperatorDemoPOJO@23fc625eSystem.out.println("student:" + student);//使用成员变量System.out.println("姓名" + student.name);System.out.println("年龄" + student.age);System.out.println("-------------------");//给成员变量赋值student.name = "林青霞";student.age = 30;//再次使用成员变量System.out.println("姓名:" + student.name);System.out.println("年龄:" + student.age);System.out.println("-------------------");//调用成员方法student.study();student.eat();}
}

案例代码二  类与对象案例 【2.a 手机类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 手机类*/
public class OperatorDemo2POJO {/*成员变量*///品牌String brand;//价格int price;//颜色String color;/*成员方法*///打电话public void call(String name) {System.out.println("给" + name + "打电话");}//发短信public void sendMessage(String name) {System.out.println("给" + name + "发短信");}
}

2 对象的内存图


2.1 一个对象的内存图


案例代码二  对象的内存图 【2.b 手机类的测试类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 手机类的测试类*/
public class OperatorDemo2 {public static void main(String[] args) {//创建对象OperatorDemo2POJO phone = new OperatorDemo2POJO();//给成员变量赋值phone.brand = "锤子";phone.price = 2999;phone.color = "棕色";//输出成员变量的值System.out.println("品牌:" + phone.brand);//锤子System.out.println("价格:" + phone.price);//2999System.out.println("颜色:" + phone.color);//棕色System.out.println("------------");//调用成员方法phone.call("林青霞");phone.sendMessage("林青霞");}
}

一个对象的内存图图解

在这里插入图片描述


2.2 两个对象的内存图(共用方法区)


案例代码二  对象的内存图 【2.c 手机类的测试类(两个对象共用一个方法区)】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 手机类的测试类(两个对象共用一个方法区)*/
public class OperatorDemo2_1 {public static void main(String[] args) {//创建对象OperatorDemo2POJO phone = new OperatorDemo2POJO();//给成员变量赋值phone.brand = "小米5s";phone.price = 1999;phone.color = "银色";//小米5s---1999---银色System.out.println(phone.brand+"---"+phone.price+"---"+phone.color);phone.call("林青霞");phone.sendMessage("林青霞");//创建对象OperatorDemo2POJO phone2 = new OperatorDemo2POJO();//给成员变量赋值phone2.brand = "IPhone7S";phone2.price = 7999;phone2.color = "土豪金";//IPhone7S---7999---土豪金System.out.println(phone2.brand+"---"+phone2.price+"---"+phone2.color);phone2.call("张曼玉");phone2.sendMessage("张曼玉");}
}

两个对象的内存图(共用方法区)图解

在这里插入图片描述


2.3 两个对象的内存图(两个引用指向同一个堆内存)


案例代码二  对象的内存图 【2.d 手机类的测试类(两个引用指向同一个堆内存)】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 手机类的测试类(两个引用指向同一个堆内存)*/
public class OperatorDemo2_2 {public static void main(String[] args) {//创建对象OperatorDemo2POJO phone = new OperatorDemo2POJO();//给成员变量赋值phone.brand = "OPPO";phone.price = 2999;phone.color = "白色";//OPPO---2999---白色System.out.println(phone.brand+"---"+phone.price+"---"+phone.color);//创建对象OperatorDemo2POJO phone2 = phone;//给成员变量赋值phone2.brand = "魅族";phone2.price = 1999;phone2.color = "蓝色";//魅族---1999---蓝色System.out.println(phone.brand+"---"+phone.price+"---"+phone.color);//魅族---1999---蓝色System.out.println(phone2.brand+"---"+phone2.price+"---"+phone2.color);}
}

两个对象的内存图(两个引用指向同一个堆内存)图解

在这里插入图片描述


2.4 成员变量和局部变量区别


案例代码三  对象的内存图 【3.a 成员变量和局部变量区别】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 成员变量和局部变量区别** 成员变量和局部变量的区别:* 		A:在类中的位置不同* 			成员变量:在类中,方法外* 			局部变量:在方法中或者方法声明上(形式参数)* 		B:在内存中的位置不同* 			成员变量:在堆内存* 			局部变量:在栈内存* 		C:生命周期不同* 			成员变量:随着对象的创建而存在,随着对象的消失而消失* 			局部变量:随着方法的调用而存在,随着方法的调用完毕而消失* 		D:初始化值不同* 			成员变量:有默认值* 			局部变量:没有默认值,必须先定义,赋值,最后使用*/
public class OperatorDemo3 {/**成员变量*/int x;public void show() {//局部变量int y = 10;System.out.println(x);System.out.println(y);}
}

3 private、this关键字和封装


3.1 private关键字的概述和特点

  • private关键字:
    • a:是一个权限修饰符;
    • b:可以修饰成员(成员变量和成员方法);
    • c:被private修饰的成员只在本类中才能访问。

案例代码四  private关键字 【4.a 学生类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 学生类 private关键字的概述和特点** 直接使用对象名访问成员变量,会存在数据的安全问题* 这个时候,我们就应该思考能不能让外界不要直接访问成员变量?    能* 如何实现呢?   用private关键字* private:* 		是一个修饰符* 		可以修饰成员变量,也可以修饰成员方法* 		被private修饰的成员只能在本类中被访问** 针对被private修饰的成员变量,我们会相应的给出getXxx()和setXxx()用于获取和设置成员变量的值,* 方法用public修饰*/
public class OperatorDemo4POJO {String name;private int age;public int getAge() {return age;}public void setAge(int a) {if (a < 0 || a > 200) {System.out.println("输入年龄有误");} else {age = a;}}public void show() {System.out.println("【name:"+name + "】 【age:" + age+"】");}
}

案例代码四  private关键字 【4.b 学生类的测试类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 学生类的测试类    private关键字的概述和特点** 直接使用对象名访问成员变量,会存在数据的安全问题* 这个时候,我们就应该思考能不能让外界不要直接访问成员变量?    能* 如何实现呢?   用private关键字* private:* 		是一个修饰符* 		可以修饰成员变量,也可以修饰成员方法* 		被private修饰的成员只能在本类中被访问** 针对被private修饰的成员变量,我们会相应的给出getXxx()和setXxx()用于获取和设置成员变量的值,* 方法用public修饰*/
public class OperatorDemo4 {public static void main(String[] args) {//创建对象OperatorDemo4POJO student = new OperatorDemo4POJO();student.show();//【name:null】 【age:0】//给成员变量赋值student.name = "林青霞";//student.age=30; //不能赋值 报错student.setAge(-30);//输入年龄有误student.show();//【name:林青霞】 【age:0】}
}

3.2 private修饰后的标准类代码

  • private最常见的应用:

  • 把成员变量用private修饰;

    • 提供对应的getXxx()/setXxx()方法;
  • 使用快捷键 alt + insert;

    • 构造器:Constructor;
    • Get和Set方法: Getter And Setter

案例代码五  private修饰后的标准类代码 【5.a 学生类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 学生类    private修饰后的标准类代码** private最常见的应用:*  把成员变量用private修饰*  提供对应的getXxx()/setXxx()方法*/
public class OperatorDemo5POJO {private String name;private String age;public String getName() {return name;}public void setName(String n) {this.name = n;}public String getAge() {return age;}public void setAge(String a) {age = a;}
}

3.3 封装的概述和好处

  • A:封装概述
    • 是面向对象三大特征之一;
    • 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。就像刚才说的年龄。
  • B:封装原则
    • 将不需要对外提供的内容都隐藏起来;
    • 属性隐藏提供公共方法对其访问;
    • 成员变量private,提供对应的getXxx()/setXxx()方法。
  • C:好处
    • 通过方法来控制成员变量的操作,提高了代码的安全性
    • 把代码用方法进行封装,提高了代码的复用性

3.4 this关键字的概述和使用

  • A:this:代表所在类的对象引用
    • 方法被哪个对象调用,this就代表那个对象;
  • B:什么时候使用this呢
    • 局部变量和成员变量重名。

案例代码六  this关键字的概述和使用 【6.a 学生类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 学生类    this关键字的概述和使用** 目前代码中的n和a没有做到见名知意,需要改进。* 如果局部变量名称和成员变量名称一致,在方法中使用的时候采用的是就近原则。** 我们有没有办法把局部变量的name赋值给成员变量的name呢?*      有** 有什么办法呢?* 		用this关键字就可以解决这个问题** this:代表所在类的对象引用* 		方法被哪个对象调用,this就代表谁。** 使用场景:* 		就是用于解决成员变量被隐藏的问题。*/
public class OperatorDemo6POJO {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

案例代码六  this关键字的概述和使用 【6.b 学生类的测试类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 学生类的测试类    this关键字的概述和使用** 目前代码中的n和a没有做到见名知意,需要改进。* 如果局部变量名称和成员变量名称一致,在方法中使用的时候采用的是就近原则。** 我们有没有办法把局部变量的name赋值给成员变量的name呢?*      有** 有什么办法呢?* 		用this关键字就可以解决这个问题** this:代表所在类的对象引用* 		方法被哪个对象调用,this就代表谁。** 使用场景:* 		就是用于解决成员变量被隐藏的问题。*/
public class OperatorDemo6 {public static void main(String[] args) {//创建对象OperatorDemo6POJO student = new OperatorDemo6POJO();//null---0System.out.println(student.getName() + "---" + student.getAge());student.setName("林青霞");student.setAge(30);//林青霞---30System.out.println(student.getName() + "---" + student.getAge());}
}

4 面向对象之构造方法


4.1 构造方法的概述和使用


4.1.1 构造方法作用概述

  • 给对象的数据进行初始化

4.1.2 构造方法格式

  • 方法名与类名相同
  • 没有返回值,连void都没有
  • 没有具体的返回值

案例代码七  构造方法格式 【7.a 学生类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 学生类    面向对象之构造方法** 构造方法:* 		给对象的数据进行初始化** 格式:* 		方法名和类名相同* 		没有返回值类型,连void都不能写* 		没有具体的返回值**/
public class OperatorDemo7POJO {private String name;public OperatorDemo7POJO() {System.out.println("这是构造方法");}public OperatorDemo7POJO(String name) {this.name = name;System.out.println("这是带参构造方法");}
}

案例代码七  构造方法格式 【7.b 学生类的测试类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 学生类的测试类    面向对象之构造方法** 构造方法:* 		给对象的数据进行初始化** 格式:* 		方法名和类名相同* 		没有返回值类型,连void都不能写* 		没有具体的返回值**/
public class OperatorDemo7 {public static void main(String[] args) {//如何调用构造方法呢//通过new关键字调用//无参格式:类名 对象名 = new 构造方法(...);OperatorDemo7POJO student1 = new OperatorDemo7POJO();//带参格式:类型 对象名 = new 构造方法(参数1,参数2,...)OperatorDemo7POJO student2 = new OperatorDemo7POJO("张三");}
}

4.2 构造方法的注意事项

如果你不提供构造方法,系统会给出默认构造方法

如果你提供了构造方法,系统将不再提供

构造方法也是可以重载的,重载条件和普通方法相同


案例代码八  构造方法的注意事项 【8.a 学生类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 学生类    构造方法的注意事项** 构造方法:用于给对象的数据进行初始化** 格式:* 		方法名和类名相同* 		没有返回值类型,连void都不能写* 		没有具体的返回值** 构造方法的注意事项:* 		A:如果我们没有给出构造方法,系统将给出一个默认的无参数构造方法供我们使用* 		B:如果我们给出了构造方法,系统将不再提供默认的构造方法供我们使用。* 			这个时候,我们如果还想使用无参数构造方法,就必须自己提供。* 			我们推荐:自己给出无参数构造方法。* 		C:构造方法也是可以重载的。** 给成员变量赋值的方式:* 		A:通过setXxx()* 		B:通过构造方法*/
public class OperatorDemo8POJO {private String name;private int age;public OperatorDemo8POJO() {}public OperatorDemo8POJO(String name) {this.name = name;}public OperatorDemo8POJO(int age) {this.age = age;}public OperatorDemo8POJO(String name, int age) {this.name = name;this.age = age;}public void show() {System.out.println(name + "---" + age);}
}

案例代码八  构造方法的注意事项 【8.b 学生类的测试类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 学生类的测试类    构造方法的注意事项** 构造方法:用于给对象的数据进行初始化** 格式:* 		方法名和类名相同* 		没有返回值类型,连void都不能写* 		没有具体的返回值** 构造方法的注意事项:* 		A:如果我们没有给出构造方法,系统将给出一个默认的无参数构造方法供我们使用* 		B:如果我们给出了构造方法,系统将不再提供默认的构造方法供我们使用。* 			这个时候,我们如果还想使用无参数构造方法,就必须自己提供。* 			我们推荐:自己给出无参数构造方法。* 		C:构造方法也是可以重载的。** 给成员变量赋值的方式:* 		A:通过setXxx()* 		B:通过构造方法*/
public class OperatorDemo8 {public static void main(String[] args) {//如何调用构造方法呢?//其实通过new关键字就可以//格式:类名 对象名 = new 构造方法名(...);OperatorDemo8POJO student = new OperatorDemo8POJO();student.show();//public Student(String name)OperatorDemo8POJO student2 = new OperatorDemo8POJO("林青霞");student2.show();//public Student(int age)OperatorDemo8POJO student3 = new OperatorDemo8POJO(30);student3.show();//public Student(String name,int age)OperatorDemo8POJO student4 = new OperatorDemo8POJO("林青霞",30);student4.show();}
}

案例代码九  标准的类代码和测试 【9.a 学生类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 标准的学生类*/
public class OperatorDemo9POJO {//成员变量private String name;private int age;public OperatorDemo9POJO() {}public OperatorDemo9POJO(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

案例代码九  标准的类代码和测试 【9.b 学生类的测试类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/22* @introduction 标准的学生类的测试类*/
public class OperatorDemo9 {public static void main(String[] args) {//无参构造方法+setXxx()OperatorDemo9POJO student = new OperatorDemo9POJO();student.setName("林青霞");student.setAge(30);System.out.println(student.getName()+"---"+student.getAge());//带参构造方法OperatorDemo9POJO student2 = new OperatorDemo9POJO("林青霞",30);System.out.println(student2.getName()+"---"+student2.getAge());}
}

5 课后练习


5.1 练习1 求长方形周长面积


练习1  【1.a 长方形类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/23* @introduction 长方形类** 需求:定义一个长方形类,定义求周长和面积的方法,然后定义一个测试类进行测试。* 	   长方形类:* 			属性:长、宽* 			行为:计算周长的方法、计算面积的方法* 		测试类:* 			测试长方形类中的每一个方法** 要求:按照封装的原则进行定义。并提供无参和全参的构造方法。*/
public class HomeWork1POJO {/**长*/private int length;/**宽*/private int wide;public HomeWork1POJO(int length, int wide) {this.length = length;this.wide = wide;}public int getLength() {return length;}public void setLength(int length) {this.length = length;}public int getWide() {return wide;}public void setWide(int wide) {this.wide = wide;}/*** @introduction 计算面积的方法* @return 长方形面积*/public int area() {return length * wide;}/*** @introduction 计算周长的方法* @return 长方形周长*/public int perimeter() {return (length + wide) * 2;}}

练习1  【1.b 长方形类的测试类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/23* @introduction 长方形类的测试类** 需求:定义一个长方形类,定义求周长和面积的方法,然后定义一个测试类进行测试。* 	   长方形类:* 			属性:长、宽* 			行为:计算周长的方法、计算面积的方法* 		测试类:* 			测试长方形类中的每一个方法** 要求:按照封装的原则进行定义。并提供无参和全参的构造方法。*/
public class HomeWork1 {public static void main(String[] args) {HomeWork1POJO rectangle = new HomeWork1POJO(3, 4);int area = rectangle.area();int perimeter = rectangle.perimeter();System.out.println("长方形面积为:" + area + "\r\n长方形周长为:" + perimeter);}
}

5.2 练习2 显示员工信息


练习2  【2.a 员工类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/23* @introduction 员工类** 需求:* 定义一个员工类:* 属性:姓名name,工号id,工资salary* 行为:一个显示所有成员信息的方法* 测试类:* 测试员工类中的每一个方法*/
public class HomeWork2POJO {/**姓名*/private String name;/**工号*/private int id;/**工资*/private double salary;/*** @introduction 无参构造*/public HomeWork2POJO() {}public HomeWork2POJO(String name, int id, double salary) {this.name = name;this.id = id;this.salary = salary;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public void information() {System.out.println("员工姓名:" + name + "\r\n员工工号:" + id + "\r\n员工工资:" + salary);}
}

练习2  【2.b 员工类的测试类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/23* @introduction 员工类的测试类** 需求:* 定义一个员工类:* 属性:姓名name,工号id,工资salary* 行为:一个显示所有成员信息的方法* 测试类:* 测试员工类中的每一个方法*/
public class HomeWork2 {public static void main(String[] args) {HomeWork2POJO staff = new HomeWork2POJO("林青霞", 12512362, 1234.56);/*员工姓名:林青霞员工工号:12512362员工工资:1234.56*/staff.information();}
}

5.3 练习3 键盘录入学员信息并打印

练习3  【3.a 学员类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/23* @introduction 学员类** 分析以下需求,并用代码实现* 1,实现从控制台接收一个学员信息,并存储到一个对象中* 2,打印这个对象的所有属性值。*** 操作步骤描述* 1,设计,并定义一个学员类:Student,要求有以下属性:* 学员编号(String)* 姓名(String)* 性别(String)* 身高(double)* 年龄(int)* 使用封装的原则,并提供无参和全参的构造方法。* 2,定义MainApp类,并包含main()方法。* 3,程序启动后,应分别提示用户输入学员编号、姓名等信息。* 例如控制台显示:* C:\>请输入学员编号:* C:\>....* C:\>请输入学员姓名:* C:\>....* .................* 4,数据接收到程序中,并定义局部变量存储;* 5,创建Student对象,通过构造方法将所有数据存储到Student对象中;* 6,打印对象中的每个属性值。*/public class HomeWork3POJO {/**学员编号*/private String ID;/**姓名*/private String name;/**性别*/private String gender;/**身高*/private int height;/**年龄*/private int age;/*** @introduction 无参构造方法*/public HomeWork3POJO() {}/*** @introduction 全参构造方法* @param ID 学员编号* @param name 姓名* @param gender 性别* @param height 身高* @param age 年龄*/public HomeWork3POJO(String ID, String name, String gender, int height, int age) {this.ID = ID;this.name = name;this.gender = gender;this.height = height;this.age = age;}public String getID() {return ID;}public void setID(String ID) {this.ID = ID;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public double getHeight() {return height;}public void setHeight(int height) {this.height = height;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}/*** @introduction 打印学员信息*/public void information() {System.out.println("学生编号:" + ID);System.out.println("姓名:" + name);System.out.println("性别:" + gender);System.out.println("身高:" + height);System.out.println("年龄:" + age);}
}

练习3  【3.a 学员类的测试类】

package com.groupies.base.day06;import java.util.Scanner;/*** @author GroupiesM* @date 2021/3/23* @introduction 学员类的测试类** 分析以下需求,并用代码实现* 1,实现从控制台接收一个学员信息,并存储到一个对象中* 2,打印这个对象的所有属性值。*** 操作步骤描述* 1,设计,并定义一个学员类:Student,要求有以下属性:* 学员编号(String)* 姓名(String)* 性别(String)* 身高(double)* 年龄(int)* 使用封装的原则,并提供无参和全参的构造方法。* 2,定义MainApp类,并包含main()方法。* 3,程序启动后,应分别提示用户输入学员编号、姓名等信息。* 例如控制台显示:* C:\>请输入学员编号:* C:\>....* C:\>请输入学员姓名:* C:\>....* .................* 4,数据接收到程序中,并定义局部变量存储;* 5,创建Student对象,通过构造方法将所有数据存储到Student对象中;* 6,打印对象中的每个属性值。*/public class HomeWork3 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入学员编号");String ID = sc.next();System.out.println("请输入学员姓名");String name = sc.next();System.out.println("请输入学员性别");String gender;while (true) {gender = sc.next();if (!gender.equals("男") && !gender.equals("女")) {System.out.println("请重新输入学员性别(男/女)");} else {break;}}System.out.println("请输入学员身高(cm)");String height = sc.next();//正则表达式校验数值while (true) {if (!height.matches("\\d+")) {System.out.println("请输入学员身高(cm)");height = sc.next();} else if (Integer.valueOf(height) < 0 || Integer.valueOf(height) > 250) {System.out.println("请输入合理的身高");height = sc.next();} else {break;}}System.out.println("请输入学员年龄");String age = sc.next();//正则表达式校验数值while (true) {if (!age.matches("\\d+")) {System.out.println("请输入学员年龄");age = sc.next();} else if (Integer.valueOf(age) < 0 || Integer.valueOf(age) > 200) {System.out.println("请输入合理的年龄值");age = sc.next();} else {break;}}HomeWork3POJO student = new HomeWork3POJO(ID, name, gender, Integer.valueOf(height), Integer.valueOf(age));student.information();}
}

5.4 练习4 调用老师类和学生类的成员方法


练习4  【4.a 老师类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/23* @introduction 老师类** 分析以下需求,并用代码实现* 1.老师类Teacher* 属性:* 姓名name* 年龄age* 讲课内容content* 行为:* 吃饭* 讲课* 2.学生类Student* 属性:* 姓名name* 年龄age* 学习内容content* 行为:* 吃饭eat()* 学习study()* 要求:* 1.按照以上要求定义Teacher类和Student类,属性要私有,生成空参、有参构造,setter和getter方法* 2.定义测试类,在main方法中创建该类的对象并给属性赋值(演示两种方法:setter方法和构造方法)* 3.调用成员方法,打印格式如下:* 年龄为30的周志鹏老师正在吃饭....* 年龄为30的周志鹏老师正在亢奋的讲着Java基础中面向对象的知识........("Java基础中面向对象"代表老师讲课的内容)* 年龄为18的韩光同学正在吃饭....* 年龄为18的韩光同学正在专心致志的听着面向对象的知识....("面向对象"代表学生学习的内容)*/
public class HomeWork4POJOTeacher {/**姓名*/private String name;/**年龄*/private int age;/**讲课内容*/private String content;/*** @introduction 无参构造方法*/public HomeWork4POJOTeacher() {}/*** @introduction 全参构造方法* @param name 姓名* @param age 年龄* @param content 讲课内容*/public HomeWork4POJOTeacher(String name, int age, String content) {this.name = name;this.age = age;this.content = content;}/***  * 年龄为30的周志鹏老师正在吃饭....*  * 年龄为30的周志鹏老师正在亢奋的讲着Java基础中面向对象的知识........("Java基础中面向对象"代表老师讲课的内容)*/public void eat() {System.out.println("年龄为" + age + "的" + name + "老师正在吃饭....");}public void teach() {System.out.println("年龄为" + age + "的" + name + "老师正在亢奋的讲着" + content + "的知识........");}
}

练习4  【4.b 学生类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/23* @introduction 学生类** 分析以下需求,并用代码实现* 1.老师类Teacher* 属性:* 姓名name* 年龄age* 讲课内容content* 行为:* 吃饭* 讲课* 2.学生类Student* 属性:* 姓名name* 年龄age* 学习内容content* 行为:* 吃饭eat()* 学习study()* 要求:* 1.按照以上要求定义Teacher类和Student类,属性要私有,生成空参、有参构造,setter和getter方法* 2.定义测试类,在main方法中创建该类的对象并给属性赋值(演示两种方法:setter方法和构造方法)* 3.调用成员方法,打印格式如下:* 年龄为30的周志鹏老师正在吃饭....* 年龄为30的周志鹏老师正在亢奋的讲着Java基础中面向对象的知识........("Java基础中面向对象"代表老师讲课的内容)* 年龄为18的韩光同学正在吃饭....* 年龄为18的韩光同学正在专心致志的听着面向对象的知识....("面向对象"代表学生学习的内容)*/
public class HomeWork4POJOStudent  {/**姓名*/private String name;/**年龄*/private int age;/**学习内容*/private String content;/*** @introduction 无参构造方法*/public HomeWork4POJOStudent() {}/*** @introduction 全参构造方法* @param name 姓名* @param age 年龄* @param content 学习内容*/public HomeWork4POJOStudent(String name, int age, String content) {this.name = name;this.age = age;this.content = content;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}/*** @introduction 行为:吃饭*/public void eat() {System.out.println("年龄为" + age + "的" + name + "同学正在吃饭....");}/*** @introduction 行为:学习*/public void study() {System.out.println("年龄为" + age + "的" + name + "同学正在专心致志的听着" + content + "的知识........");}
}

练习4  【4.c 老师类和学生类的测试类】

package com.groupies.base.day06;/*** @author GroupiesM* @date 2021/3/23* @introduction 老师类和学生类的测试类** 分析以下需求,并用代码实现* 1.老师类Teacher* 属性:* 姓名name* 年龄age* 讲课内容content* 行为:* 吃饭* 讲课* 2.学生类Student* 属性:* 姓名name* 年龄age* 学习内容content* 行为:* 吃饭eat()* 学习study()* 要求:* 1.按照以上要求定义Teacher类和Student类,属性要私有,生成空参 、有参构造,setter和getter方法* 2.定义测试类,在main方法中创建该类的对象并给属性赋值(演示两种方法:setter方法和构造方法)* 3.调用成员方法,打印格式如下:* 年龄为30的周志鹏老师正在吃饭....* 年龄为30的周志鹏老师正在亢奋的讲着Java基础中面向对象的知识........("Java基础中面向对象"代表老师讲课的内容)* 年龄为18的韩光同学正在吃饭....* 年龄为18的韩光同学正在专心致志的听着面向对象的知识....("面向对象"代表学生学习的内容)*/
public class HomeWork4 {public static void main(String[] args) {HomeWork4POJOStudent student = new HomeWork4POJOStudent("林青霞", 66, "面向对象");HomeWork4POJOTeacher teacher = new HomeWork4POJOTeacher("周伯通", 99, "java基础");student.eat();//年龄为66的林青霞同学正在吃饭....student.study();//年龄为66的林青霞同学正在专心致志的听着面向对象的知识........teacher.eat();//年龄为99的周伯通老师正在吃饭....teacher.teach();//年龄为99的周伯通老师正在亢奋的讲着java基础的知识........}
}

21/03/22

M


http://www.ppmy.cn/news/307850.html

相关文章

转载:iPhone8重新设计发布延期,iPhone8或推迟上市时间

从事ios开发两年多&#xff0c;本人也算是苹果的伪粉吧&#xff0c;从去年都关注iPhone8的动态&#xff0c;到了今年就听说最新的苹果手机估计赶不上今年苹果十周年发布了&#xff0c;原因可能是苹果公司遇到一个技术问题&#xff0c;影响了iPhone8的如期推出。 今年是iPhone的…

7stars

<html><head><style><!--body, p, div,td,input {font:menu;line-height: 150%}.div { font-family: 宋体; font-size: 12px; line-height: 150% }--></style><title>7Stars</title></head><body><script language&q…

Java seven

今天学习了while循环和do while循环 进行了相应循环的简单练习 并从中掌握了一些重要的知识点 进行嵌套循环的学习 并合理的完成了菱形的代码编写 所接触的java与C语言有较大的的类似之处 public class Main { public static void main(String[] args) {for (int i 0;i < …

SCSS

一、Scss 1.语法 变量 使用$符号开头遵循css选择器 可以包含-,_。尽量见名知意 $jd_red: #f00; 颜色变量 $my-width: 20px; 数值变量 $normal-content: “见名知意”; $my-border-style:solid; 样式变量 $my_border: 1px solid $jd_red; 变量中引入其他变量 注意&#xff1a; 1…

SASS 和 SCSS 的区别

原文 Difference Between SASS and SCSS SASS&#xff08;Syntactically Awesome Style Sheets&#xff09;是一种由 Hampton Catlin 设计、Chris Eppstein 和 Natalie Weizenbaum 开发的样式表语言。 它是一种预处理器脚本语言&#xff0c;将被编译或解释为 CSS。 Sass Scri…

秒懂设计模式之装饰者模式(Decorator Pattern)

定义 装饰模式是在不必改变原类和使用继承的情况下&#xff0c;动态地扩展一个对象的功能。它是通过创建一个包装对象&#xff0c;也就是装饰来包裹真实的对象 使用场景 需要在运行时动态的给一个对象增加额外的职责时候需要给一个现有的类增加职责&#xff0c;但是又不想通过…

SSD7~

又搬来了一个适合嵌入式的框架哦 对计算和内存的高需求是将现有目标检测网络部署到嵌入式设备中的最大挑战。现有的轻量级目标检测器直接使用轻量级神经网络架构&#xff0c;如MobileNet或在大尺度分类数据集上预先训练&#xff0c;导致网络结构灵活性差&#xff0c;不适用于某…

iOS开发 静态库和动态库

库是程序代码的集合&#xff0c;是程序开发者与其他开发者之间进行代码共享的一种方式。库根据源代码的公开情况可以分为开源库和闭源库。开源库的源代码可见&#xff0c;比如afnetworking&#xff1b;闭源库的源代码不可见&#xff0c;是一段编译好的二进制代码。闭源库又根据…