6.oop-类和对象
一.如何抽象对象
1.创建一个类
2.给该描述属性
属性就是java中所有的数据类型
3.给该类定义行为方法
方法的签名是:public void 方法名(){方法体}
公共的 无返回类型
二.如何使用类和对象
1.创建类的对象实例
Student stu = new Student();
2.访问对象的属性和方法:通过对象名.属性名或者方法名
例如:stu.name = "张三";
stu.study();
三.构造方法
1.定义:构建一个类的对象的方法
2.特点:和类名一致,没有返回类型
3.调用:通过new关键字来调用
四.带参数和返回类型的方法
1.方法的签名:访问修饰符 返回类型 方法名(形参数列表){方法体}
例如:public double calculate(double num1,double num2){}
2.返回类型:是方法执行完后返回的数据类型,在方法体中必须出现return关键字
3.return关键字除了返回数据之外还可以结束当前方法
4.在void的方法中也可以使用return关键字,但不能返回数据,只是结束方法
5.在调用带参数的方法时注意实参要和形参的个数,顺序,类型完全一致
6.调用带返回类型的方法,一般都用变量来接收返回值
五.例子
1.抽象出一个老师类,描述其属性和方法
测试类中,创建老师类对象,给其属性赋值,然后调用其方法
2.完成一个景区售票机的案例,游客如果年龄在8岁以下是全免,8-15岁是半票,15以上是成人票。
要求写一个程序完成买票过程。要求是用类和对象来实现
a.分析该案例中有哪些对象
b.完成对象的抽象(描述属性和方法)
c.编写测试类,测试数据
业务修改:除了年龄,根据性别有了新的业务需求:
1.性别为女,15岁以下 全免,60岁以上也是全免 15--60都是成人票
2。性别为男买票规则不变
3.编写一个计算器的程序,完成各项运算。完成一次运算
要求:面向对象的编程思想
4.编写一个榨汁器:根据用户输入的不同水果,榨出不同的饮料。
要求,用带返回值和参数的方法完成
package com.demo1102;
/**
* 类和对象的案例
* @author allen
*
*/
public class Demo1 {
public static void main(String[] args) {
Student stu = new Student();//创建了一个学员实例对象
//新构建出来的对象中的属性全部为默认初始值
//访问属性和方法
stu.name = "张三";
stu.age = 18;
stu.sex = "女";
stu.phone = "110"; //访问方法
stu.study();
stu.intrduce();
}
}
//一个类中可以由多个类,但是public修饰的类必须和文件名相同
class Student{
String name;
String sex;
int age;
String phone;
double height; public Student() {
//此方法为构造方法,含义是创建该类的对象时被调用
} public void study(){
System.out.println("我好好学员,天天向上");
System.out.println("偶尔抽空撸两把");
} public void intrduce(){
System.out.println("我的名字是:"+name+",我今年"+age+"岁,我的手机号码是:"+phone+",欢迎骚扰");
}
}
package com.demo1102; import java.util.Scanner;
/**
* 买票案例
* @author allen
*
*/
public class Demo2 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入您的年龄:");
Guest g = new Guest();
g.age = s.nextInt(); System.out.println("请输入性别:");
g.sex = s.next();
g.ticket();
}
} class Guest{
int age;
String sex; public void ticket(){
if("男".equals(sex)){
if(age<8){
System.out.println("全免");
}else if(age>=8&&age<15){
System.out.println("半票");
}else if(age>=15){
System.out.println("成人票");
}
}else if("女".equals(sex)){
if(age<=15){
System.out.println("全免");
}else if(age>15&&age<=60){
System.out.println("成人票");
}else if(age>60){
System.out.println("全免");
}
}else{
System.out.println("你可以上天了");
} }
}
package com.demo1102; import java.util.Scanner; import javax.security.sasl.SaslClient;
/**
* 计算器案例
* @author allen
*
*/
public class Calculate {
double num1;
double num2;
String type;
double result; public void count(){
switch(type){
case "+":
result = num1+num2;
break;
case "-":
result = num1-num2;
break;
case "*":
result = num1*num2;
break;
case "/":
result = num1/num2;
break;
case "%":
result = num1%num2;
break;
}
System.out.println("result="+result);
} public void test(){
int a=1;
if(a!=1){
return;//return在此处的作用就是结束当前方法
}
System.out.println("程序结束");
} public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Calculate c = new Calculate();
System.out.println("请输入第一个数:");
c.num1 = sc.nextDouble();
System.out.println("请输入运算符号:");
c.type = sc.next();
System.out.println("请输入第二个数:");
c.num2 = sc.nextDouble(); c.count();
}
}
package com.demo1102; import java.util.Scanner; /**
* 榨汁器案例
* @author allen
*
*/
public class Demo4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要榨汁的水果:");
String shuiguo = sc.next(); Juicer j = new Juicer();
String result = j.juicing(shuiguo);
System.out.println("您炸的"+result+"已经好了");
}
} class Juicer{
public String juicing(String fruit){
System.out.println("正在榨汁.....");
try {
Thread.sleep(5000);//模拟一个5秒的等待过程
} catch (InterruptedException e) {
e.printStackTrace();
}
return fruit+"汁";
}
}
/*
* 3.编写一个计算器的程序,完成各项运算。
要求:面向对象的编程思想
*/
package com.class1102; import java.util.Scanner; public class Class03 { public static void main(String[] args) {
// TODO Auto-generated method stub Scanner sc=new Scanner(System.in);
Operate o=new Operate();
System.out.println("请输入第一个数");
o.a=sc.nextDouble();
System.out.println("请输入第二个数");
o.b=sc.nextDouble();
System.out.println("请输入操作符");
o.sign=sc.next();
o.js();
} } class Operate{
double a,b,result;
String sign; public Operate(){ } public void js(){
if(sign.equals("+"))
{
result=a+b;
}else if(sign.equals("-"))
{
result=a-b;
}else if(sign.equals("*"))
{
result=a*b;
}else if(sign.equals("/"))
{
result=a/b;
}
System.out.println("计算结果为:"+result);
}
}
/*
* 1.写一个类描述笔记本电脑:
属性有:品牌,重量,cpu型号,内存大小,硬盘大小,显卡型号
方法有:显示笔记本基本信息 showInfo()
编写测试类:给笔记本对象属性赋值,调用显示笔记本基本信息方法展示给客户
*/
package com.class1102; import java.util.Scanner; public class Test1 { public static void main(String[] args) {
// TODO Auto-generated method stub Notebook nt=new Notebook();
nt.sign="宏碁(acer)";
nt.weight=1.3;
nt.cpu="N3450";
nt.memory=4;
nt.hdisk=128;
nt.dcard="集成显卡";
nt.showInfo();
} } class Notebook{
String sign;
double weight;
String cpu;
int memory;
int hdisk;
String dcard;
public void showInfo()
{
System.out.println("该笔记本品牌是:"+sign+",");
System.out.println("该笔记本重量是:"+weight+"kg,");
System.out.println("该笔记本cpu型号是:"+cpu+",");
System.out.println("该笔记本内存大小是:"+memory+"G,");
System.out.println("该笔记本硬盘大小是:"+hdisk+"G,");
System.out.println("该笔记本显卡型号是:"+dcard+",");
} }
/*
* 2.写一个个人所得税计算器,用户输入税前工资,计算得到税后工资
要求用带参数和返回类型的方法
规则:个税起征点为3500
超过部分 税点
1500以内 5%
1500-3000 10%
3000-5000 15%
5000-8000 20%
8000以上 25%
*/
package com.class1102; import java.util.Scanner; public class Test2 { public static void main(String[] args) {
// TODO Auto-generated method stub Scanner sc=new Scanner(System.in);
TaxCalculator tc=new TaxCalculator();
System.out.println("请输入税前工资");
tc.count(sc.nextDouble());
} } class TaxCalculator{
public double count(double i)
{
double result=0;
if(i<=3500)
{
result=i;
}else if(i>3500&&i<5000)
{
result=3500+(i-3500)*(1-0.05);
}else if(i>=5000&&i<6500)
{
result=3500+1500*(1-0.05)+(i-5000)*(1-0.1);
}else if(i>=6500&&i<8500)
{
result=3500+1500*(1-0.05)+1500*(1-0.1)+(i-6500)*(1-0.15);
}else if(i>=8500&&i<11500)
{
result=3500+1500*(1-0.05)+1500*(1-0.1)+2000*(1-0.15)+(i-8500)*(1-0.2);
}else{
result=3500+1500*(1-0.05)+1500*(1-0.1)+2000*(1-0.15)+3000*(1-0.2)+(i-11500)*(1-0.25);
}
System.out.println("税后工资为:"+result);
return result;
} }
/*
* 3.完成一个自动摇奖机
摇奖机可以由工作人员设置奖品,然后随机抽奖
思路:
设计一个摇奖机类
属性:是一个奖品数组
方法:
方法一 :设置奖品方法
方法二:随机抽出奖品
测试类:
第一步工作人员设置奖品,第二步,工作人员完成抽奖
*/
package com.class1102; import java.util.Random;
import java.util.Scanner; public class Test3 { public static void main(String[] args) {
// TODO Auto-generated method stub Scanner sc=new Scanner(System.in);
Random r=new Random(); Ernie e=new Ernie();
String s[]=new String[7];
for(int j=0;j<e.prize.length;j++)
{
System.out.println("请输入第"+j+"个奖品");
s[j]=sc.nextLine();
}
e.setErnie(s); System.out.println("开始抽奖");
String j=e.getERnie(r.nextInt(8));
System.out.println("奖品是"+j); } } class Ernie{
String prize[]=new String[7];;
public void setErnie(String s[])
{
for(int i=0;i<prize.length;i++)
{
prize[i]=s[i];
}
}
public String getERnie(int t)
{
String p=null;
for(int i=0;i<prize.length;i++)
{
if(t==i)
{
p=prize[i];
}
}
return p;
} }
六.小游戏
/*
* 1.猜数字游戏:
系统会自动生成0-9的不重复的4个数字 例如:8350
用户有8次机会来猜这些数字的,不仅要数字正确,顺序也要正确才为答对
每次用户都是输入4个数字,系统给出相应的提示:
提示规则:数字和位置正确的提示A 数字正确但位置不正确的提示B
例如:用户输入1234 系统提示:0A1B
用户第二次:5678 系统提示:0A2B
用户第三次:0912 系统提示:0A1B
用户第四次:1203 系统提示:0A2B
用户第五次:3051 系统提示:1A2B
用户第六次:
Random r = new Random();
r.nextInt(10);0-9
*/
package com.class1101; import java.util.Random;
import java.util.Scanner; public class Class01 { public static void main(String[] args) {
// TODO Auto-generated method stub int arr[]=new int[4];
Random r=new Random(); for(int i=0;i<arr.length;i++)
{
arr[i]=r.nextInt(10);
for(int j=0;j<i;j++)
{
while(arr[i]==arr[j])
{
arr[i]=r.nextInt(10);
}
}
//System.out.print(arr[i]+" ");
} Scanner sc=new Scanner(System.in);
int num;
int arr2[]=new int[4];
for(int i=1;i<9;i++)
{
System.out.print("请输入第"+i+"个数:");
num=sc.nextInt();
arr2[0]=num/1000;
arr2[1]=(num%1000)/100;
arr2[2]=(num%1000)%100/10;
arr2[3]=(num%1000)%100%10;
int a=0;
int b=0;
for(int j=0;j<arr2.length;j++)
{
//System.out.print(arr2[j]+" ");
if(arr2[j]==arr[j])
{
a++;
}else{
for(int k=0;k<arr.length;k++)
{
if(arr2[j]==arr[k])
{
b++;
}
}
}
}
if(a==4)
{
System.out.println("恭喜猜中数字");
break;
}else
{
System.out.println("提示:"+a+"A"+b+"B");
}
} } }
/*
* 2.穿越火线
用二维数组生成一个15*15的地图,全部用方块表示□
随机生成用户位置用三角形△表示,随机生成目的位置用五角星☆表示,在地图上随机生成20个地雷用户不可见。
用户选择上下左右移动位置,每次移动一格,移动后要显示用户走过的路程用○表示。踩上地雷身亡,顺利到达目标则为胜利!
*/
package com.class1101; import java.util.Random;
import java.util.Scanner; public class Class02 { public static void main(String[] args) {
// TODO Auto-generated method stub Scanner sc=new Scanner(System.in);
char arr[][]=new char[15][15];
Random r=new Random(); //1、随机生成起点和终点的坐标,并使两点不重复
int r1=r.nextInt(arr.length);
int r2=r.nextInt(arr[0].length);
int s1=r.nextInt(arr.length);
int s2=r.nextInt(arr[0].length);
while(r1==s1&&r2==s2)
{
r1=r.nextInt(arr.length);
} //2、生产20个地雷的坐标,并使其本身不重复,和起点、终点也不重复
int d1[]=new int[20];
int d2[]=new int[20];
for(int i=0;i<d1.length;i++)
{
d1[i]=r.nextInt(arr.length);
d2[i]=r.nextInt(arr.length);
for(int j=0;j<i;j++)
{
while(d1[i]==d1[j]&&d2[i]==d2[j]||d1[i]==r1&&d2[i]==r2||d1[i]==s1&&d2[i]==s2)
{
d1[i]=r.nextInt(arr.length);
d2[i]=r.nextInt(arr.length);
}
}
} int t1[]=new int[arr.length];
int t2[]=new int[arr.length];
int t3=0;
//int t1=-1,t2=-1;
while(true)
{
//3.通过键盘输入移动用户位置
String key=sc.nextLine();
if(key.equals("w")){
if(r1>0)
{
r1--;
}
}else if(key.equals("s"))
{
if(r1<arr.length-1)
{
r1++;
}
}else if(key.equals("a"))
{
if(r2>0)
{
r2--;
}
}else if(key.equals("d"))
{
if(r2<arr.length-1)
{
r2++;
}
} //4.判断用户是否踩到地雷,如果踩到,游戏失败。
boolean b=false;
for(int i=0;i<d1.length;i++)
{
if(r1==d1[i]&&r2==d2[i])
{
b=true;
System.out.println("踩到地雷,游戏失败");
break;
}
}
if(b)
{break;} //5.输出游戏界面
int i,j=0;
for(i=0;i<arr.length;i++)
{
for(j=0;j<arr[i].length;j++)
{
if(i==r1&&j==r2)
{
arr[i][j]='△';
}else if(i==s1&&j==s2){
arr[i][j]='☆';
}else{
arr[i][j]='□';
for(int k=0;k<t3;k++ )
{
arr[t1[k]][t2[k]]='○';
} /*if(i==t1&&j==t2)
{
arr[i][j]='○';
}else{
arr[i][j]='□';
}*/
}
System.out.print(arr[i][j]+"\t"); }
System.out.println();
}
t1[t3]=r1;
t2[t3]=r2;
t3++;
//t1=r1;
//t2=r2; //6.当用户成功到达终点时,游戏胜利。
if(r1==s1&&r2==s2){
System.out.println("胜利!");
break;
}
} } }
6.oop-类和对象的更多相关文章
- 【译文】 C#面向对象的基本概念 (Basic C# OOP Concept) 第一部分(类,对象,变量,方法,访问修饰符)
译文出处:http://www.codeproject.com/Articles/838365/Basic-Csharp-OOP-Concept 相关文档:http://files.cnblogs.c ...
- python基础----面向对象的程序设计(五个阶段、对小白的忠告、关于OOP常用术语)、类、对象
一.面向对象的软件开发有如下几个阶段 1.面向对象分析(object oriented analysis ,O ...
- 【PHP面向对象(OOP)编程入门教程】2.什么是类,什么是对象,类和对象这间的关系
类的概念:类是具有相同属性和服务的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属 ...
- oop面向对象【类与对象、封装、构造方法】
今日内容 1.面向对象 2.类与对象 3.三大特征——封装 4.构造方法 教学目标 1.能够理解面向对象的思想 2.能够明确类与对象关系 3.能够掌握类的定义格式 4.能够掌握创建对象格式,并访问类中 ...
- 前端学PHP之面向对象系列第一篇——类和对象
× 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...
- day24:面向对象设计与面向对象编程、类和对象
一.三大编程范式: 面向过程: 面向函数: 面向对象: 二.程序的进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定 ...
- iOS学习10之OC类和对象
本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...
- JAVA入门第二季 第一章 类和对象
面向对象编程 Object Oriented Programming OOP 第一.什么是类和对象 在具体说明类和对象之前,先说说别的. 眼睛在人类身体上最为有用的器官.如果一个没有了眼睛,这个人与世 ...
- java面向对象编程——第四章 类和对象
OO:面向对象 OOP:面向对象编程 OOA:面向对象分析 OOD:面向对象设计 结构化编程:从顶向下,将一个大问题分解成更小的任务,然后为每一个更小的任务编写一个过程.最后程序员会编写一个主过程来启 ...
- iOS学习之Object-C语言类和对象
一.OC语言的特点:封装,继承,多态:包含一个运行时系统:类库丰富. 二.面向对象 1.概述 OOP(Object Oriented Programming)面向对象编程. ...
随机推荐
- ReactDom
今天工作中使用了这个,感觉很好用啊! 首先: 这个ReactDom是干嘛用的? 答: react-dom 包提供了 DOM 特定的方法,可以在你的应用程序的顶层使用,如果你需要的话,也可以作为 R ...
- link-hover-visited-active
:link { color: blue; } :visited { color: purple; } :hover { color: red; } :active { color: orange; } ...
- JDK和Tomcat安装
JDK安装: 1,选择安装位置,其余默认安装,安装两次,一个是JDK,一个是JRE,安装在两个文件夹中. 2,配置环境变量: 1,新建一个变量,变量名:JAVA_HOME,变量值:C:\Program ...
- JavaScript中的let和const
在ES6之前,JavaScript中只有两种作用域:全局作用域和函数内部的局部作用域.ES6中新增了两个重要的关键字,let和const,从而引入了块级作用域. 关键字var 使用var关键字声明的变 ...
- POJ 2942Knights of the Round Table(tarjan求点双+二分图染色)
Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 13954 Accepted: 4673 Description Bein ...
- 洛谷P1333 瑞瑞的木棍(欧拉回路)
题目描述 瑞瑞有一堆的玩具木棍,每根木棍的两端分别被染上了某种颜色,现在他突然有了一个想法,想要把这些木棍连在一起拼成一条线,并且使得木棍与木棍相接触的两端颜色都是相同的,给出每根木棍两端的颜色,请问 ...
- springboot 常用配置文件
1.连接数据库 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId> ...
- centos6 自带python2.6升级python2.7+
centos6系统自带Python为2.6.6版本,升级搞版本操作如下(python2-python3都一样) 1.下载需要升级的python包 官方下载地址:https://www.python.o ...
- android开发——Android开发中的47个小知识
1.判断sd卡是否存在 boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environme ...
- Android内存优化(五) Lint代码扫描工具
1.使用 工具栏 -> Analyze -> Inspect Code… 点击 Inspect Code 后会弹出检查范围的对话框: 默认是检查整个项目,我们可以点击 Custom sc ...