JAVA 学习日记(2).面向对象,对象,类,封装,构造方法,重载
来源:互联网 发布:古力娜扎五官分析知乎 编辑:程序博客网 时间:2024/06/02 19:00
1.面向对象
面向对象编程 就是使用对象进行程序设计,简写成OOP。
2.对象
万物皆对象。
对象的具有的各种特征:属性。
对象执行的操作:方法。
对象的属性和方法通常被封装在一起,共同体现事物的特性, 二者相辅相承,不能分割。
方法的命名规则:
必须以字母、‘_’或‘$’开头。
可以包括数字,但不能以它开头。
通常方法名是一个动词,如果有两个以上单词组成,第一个单词的首字母小写, 其后单词首字母大写。
方法的返回值:
两种情况:
如果方法具有返回值,方法中必须使用关键字return返回该值,返回类型为该返回值的类型。
如果方法没有返回值,返回类型为void。
对象的使用步骤:
(1).使用new创建类的一个对象。
(2).使用对象:使用“.”进行以下操作:
给类的属性赋值:对象名.属性。
调用类的方法:对象名.方法名()。
3.类
类是模型,确定对象将会拥有的特征(属性)和行为(方法)。
事物的特性在类中用变量表示;每个对象的每个属性都拥有其特定的值;属性名称由类的所有对象共享;对象或实体拥有的特征在类中表示时称为属性。
事物的行为和动作在类中用函数(方法)表示;每个对象都有相同的动作和行为;
对象执行的操作在类中表示为方法。
所有Java程序都以类class为组织单元。
关键字class定义自定义的数据类型。
定义一个类的步骤:
(1)、定义类名。
(2)、编写类的属性。
(3)、编写类的方法。
4.封装
封装的概念:
封装,就是隐藏实现细节。
将属性私有化,提供公有方法访问私有属性。
通过这些公有方法访问私有属性 。
(属性私有化,提供公有方法,访问私有属性。)
封装的实现:
(1)、修改属性的可见性来限制对属性的访问。
(2)、为每个属性创建一对赋值(setter)方法和取值(getter) 方法,用于对这些属性的访问。
(3)、在setter和getter方法中,加入对属性的存取限制。
5.构造方法
构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值。
构造方法必须满足以下语法规则:
(1)、方法名与类名相同。
(2)、没有返回类型。
使用new关键字调用构造方法。
通过带参数的构造方法,显式地为实例变量赋予初始值。
通过调用带参数的构造方法,简化对象初始化的代码。
6.重载
方法重载可以方便方法的调用者,但方法重载应遵循三大原则:
方法名相同。
参数列表不同。
属于同一作用域。
可以适当地重载构造方法,使初始化对象的方式更加灵活;this引用总是指向调用方法的对象本身;静态成员属于类而不是属于某个对象。
7.练习
(1).定义一个管理员类:
属性:用户名 密码
方法:
显示管理员信息的方法:返回管理员用户名和密码的信息;
验证用户密码的方法:传入用户名和密码的参数,返回布尔类型,用户名和密码是否正确。
编写一个测试类,创建一个管理员类,初始化设置用户名和密码,控制台接收用户输入的用户名和密码,调用验证的方法,显示是否登录成功。
package com.zrgj.shanji;public class Login { String userName; String userPwd; public Login(String userName,String userPwd){ this.userName="小萝莉"; this.userPwd="123"; } public Login(){ } public void login() { System.out.println("用户名:"+userName+""+"密码:"+userPwd); } public boolean test(String name,String pwd){ if(name.equals(userName)&&pwd.equals(userPwd)){ return true; } return false; } }
package com.zrgj.shanji;import java.util.Scanner;public class LoginTest { public static void main(String[] args) { Login xiaowang=new Login("小萝莉","123");// xiaowang.userName;// xiaowang.userPwd; Login xiaowang2=new Login(); Scanner scan=new Scanner(System.in); String name=scan.next(); String pwd=scan.next(); boolean boo=xiaowang.test(name, pwd); if(boo){ System.out.println("正确进入!"); }else{ System.out.println("输入错误!"); } }}
(2).创建一个程序员类和项目经理类
封装两个类的所有属性,生成getter和setter方法;
为两个类分别编写两个构造函数,一个无参构造函数要求为所有属性设置默认值,另一个是带所有属性参数的构造函数。
编写测试类,分别创建两个程序员和两个项目经理,并调用show()方法显示详细信息。
程序员类 SE
属性:
员工编号:id
姓名:name
性别:gender
工资:salary
关注度:hot
方法:
显示程序员的详细信息:show()
项目经理类 PM
属性:
员工编号:id
姓名:name
性别:gender
工资:salary
项目经验:exp
项目分红:bonus
方法:
显示项目经理的详细信息:show()
SE.javapackage com.zrgj.shanji;public class SE {// 定义私有属性 private int id; private String name; private String gender; private int salary; private String hot; public int getId() { return id; } public void setId(int 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 int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } public String getHot() { return hot; } public void setHot(String hot) { this.hot = hot; }// 创建调用方法 public void show() { System.out.println("员工编号:"+id+"\n"+"姓名:"+name+"\n"+"性别:"+gender+"\n"+"工资:"+salary+"\n"+"关注度:"+hot); }}
SETest.javapackage com.zrgj.shanji;public class SETest { public static void main(String[] args) {// 程序员小王的信息 SE xiaowang=new SE(); xiaowang.setId(1234); xiaowang.setName("小王"); xiaowang.setGender("女"); xiaowang.setSalary(10000); xiaowang.setHot("99"); xiaowang.show();// 程序员小王2的信息 SE xiaowang2=new SE(); xiaowang2.setId(1235); xiaowang2.setName("小王2"); xiaowang2.setGender("女"); xiaowang2.setSalary(10002); xiaowang2.setHot("98"); xiaowang2.show(); }}
PM.javapackage com.zrgj.shanji;public class PM {// 定义私有属性 private int id; private String name; private String gender; private int salary; private int exp; private int bonus; public int getId() { return id; } public void setId(int 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 int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } public int getExp() { return exp; } public void setExp(int exp) { this.exp = exp; } public int getBonus() { return bonus; } public void setBonus(int bonus) { this.bonus = bonus; }}
PMTest.javapackage com.zrgj.shanji;public class PMTest { public static void main(String[] args) { // 经理小刘的信息 PM xiaoliu=new PM(); xiaoliu.setId(1234); xiaoliu.setName("小刘"); xiaoliu.setGender("男"); xiaoliu.setSalary(10000); xiaoliu.setExp(99); xiaoliu.setBonus(999); show(xiaoliu); // 经理小刘2的信息 PM xiaoliu2=new PM(); xiaoliu2.setId(1234); xiaoliu2.setName("小刘2"); xiaoliu2.setGender("男"); xiaoliu2.setSalary(10009); xiaoliu2.setExp(100); xiaoliu2.setBonus(9998); show2(xiaoliu2); } private static void show(PM xiaoliu) { System.out.println("员工编号:"+xiaoliu.getId()+"\n"+"姓名:"+xiaoliu.getName()+"\n"+"性别:"+xiaoliu.getGender()+"\n"+"工资:"+xiaoliu.getSalary()+"\n"+"项目经验:"+xiaoliu.getExp()+"\n"+"项目分红:"+xiaoliu.getBonus()); } private static void show2(PM xiaoliu2) { System.out.println("员工编号:"+xiaoliu2.getId()+"\n"+"姓名:"+xiaoliu2.getName()+"\n"+"性别:"+xiaoliu2.getGender()+"\n"+"工资:"+xiaoliu2.getSalary()+"\n"+"项目经验:"+xiaoliu2.getExp()+"\n"+"项目分红:"+xiaoliu2.getBonus()); }}
(3).编写会员类:
属性:
会员号
会员姓名
积分
方法:
验证会员号是否合法 (判断录入是否合法(会员号必为4位整数))
抽奖是否是幸运用户 (员号的百位数字等于产生的随机数字即为幸运会员)
返回折扣(x < 2000 9折
2000<=x<4000 8折
4000<=x<8000 7折
x>=8000 6折)
编写测试类:
接收控制台用户输入会员号、会员姓名、积分,创建一个会员对象,验证会员号是否合法,不合法提示退出,合法保存会员数据,同时显示当前用户的折扣信息,最后进行抽奖,提示是否是幸运用户。
Huiyuan.javapackage com.zrgj.shanji;public class Huiyuan {// 定义会员属性 private int id; private String name; private int score; public int getId() { r turn id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; }//会员号合法的条件 public boolean validate(int id){ return id>1000 && id<9999; }// 折扣条件 public double getCut(){ if(score<2000){ return 0.9; }else if (score<4000) { return 0.8; }else if(score<8000){ return 0.7; }else{ return 0.6; } } }
HuiyuanTest.javapackage com.zrgj.shanji;import java.util.Scanner;public class HuiyuanTest { public static void main(String[] args) {// 扫描输入 Scanner scan=new Scanner(System.in); System.out.println("请输入会员号:"); int id=scan.nextInt(); System.out.println("请输入会员姓名:"); String name=scan.next(); System.out.println("请输入会员积分:"); int score=scan.nextInt();// 创建会员对象 Huiyuan xiaowang=new Huiyuan();// 判断录入是否合法,合法保存会员数据,同时显示当前用户的折扣信息,最后进行抽奖,提示是否是幸运用户// 不合法则提示退出 if(xiaowang.validate(id)){ System.out.println("录入成功!"); System.out.println("您的折扣为:"+xiaowang.getCut()); int random = (int) (Math.random() * 10); int baiwei = id / 100 % 10; if (random==baiwei) { System.out.println("恭喜您成为幸运会员!"); }else{ System.out.println("很遗憾,您没有抽中!"); } }else{ System.out.println("录入不合法!请退出!"); } }}
- JAVA 学习日记(2).面向对象,对象,类,封装,构造方法,重载
- 黑马程序员--Java学习日记之面向对象(封装,继承和构造方法)
- Java面向对象基础---名词概念的理解:方法的重载、构造函数、封装性
- 面向对象(类、封装、this、构造方法)
- 面向对象2---封装,this,构造方法
- java学习之旅35--面向对象_08_方法重载_构造方法重载
- Java学习日记(三)面向对象、类、封装、构造函数、this、static、静态代码块、单例设计模式
- 18天Java学习---7.面向对象编程02-类的封装性以及构造方法
- JAVA基础第五天学习日记_面向对象开发思想、匿名对象、封装、私有、构造函数
- 构造方法,方法重载——java面向对象
- Java学习之面向对象二-----方法的重载和构造方法
- java学习之路 之 面向对象编程-面向对象特征之一(封装和隐藏)级类的成员之三(构造器、构造方法)
- java学习日记_22:面向对象之构造方法。07.11—12;
- java学习日记_36:面向对象之继承中构造方法的关系
- 黑马程序员—Java面向对象(类和对象、封装、构造方法、this关键字、static关键字)
- 从零开始学习Java——面向对象编程之类、构造器、方法重载(第七天)
- 面向对象--构造方法、重载和重写
- java--面向对象(重载,封装,继承)
- 深度探索c++对象模型之类全局对象的初始化与析构
- qemu模拟arm系统vexpress-a9—uboot+uImage
- HDU-3938-Portal
- gem5配置DRAMSim2跑Android benchmark遇到的问题
- Hungry Sequence(水题)
- JAVA 学习日记(2).面向对象,对象,类,封装,构造方法,重载
- BZOJ 4391/Luogu3129[Usaco2015 dec]High Card Low Card
- noip模拟题 11.2
- HQL--面向对象查询语言
- E&M信令详细介绍
- 第一次尝试
- 【数据结构】AVL树详解
- XTOJ 1249 Rolling Variance【数学,滚动方差】
- html5第二天笔记(下)