6.oop-类和对象
Posted wlxslsb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]+" "); } 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-类和对象的主要内容,如果未能解决你的问题,请参考以下文章