面向对象编程封装
我们先从最简单的一个对象设置开始,设置一个phone对象,并赋予里面brand和number,为了进行比对,我让number私有化,而让brand变成public。
主入口文件:
1 2 3 4 5 6 7 8 9 10 11
| package com.bayeeaa.demo1;
public class newphone { public static void main(String[] args) { phone p = new phone(); p.brand = "小米"; p.setNumber(20); System.out.println(p.getNumber()); }
}
|
类文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package com.bayeeaa.demo1;
public class phone { private int number; String brand; public int getNumber(){ return number; }
public void setNumber(int n){ if(n>=18 && n<50){ number = n; }else{ System.out.println("输入不被允许"); } } public void call(){ System.out.println("手机在打电话"); } }
|
我们可以看到当number被私有化后,其值的修改就只能在类文件中发送,这样可以提高文件的安全性,我们只要通过调用getNumber和setNumber函数就可以实现值的传递并修改。
两种不同的构造方式
空参构造:
不带任何的参数。
有参构造:
1 2 3 4
| public phone(String brand,int number){ this.brand = brand; this.number = number; }
|
这里的方法不带void或int等,没有return,是由于它的执行是由jvm调动的,所以主函数调用时候就会执行,无需手动执行。
主函数:
1
| phone p = new phone("小米",20);
|
这样就可以直接传入参数。
快捷键:
1 2 3 4 5 6 7
| public class User { private String name; private int number;
}
|
alt + INSERT
ptg
这个方法需要在setting中下载ptg插件。
通过快捷键我们可以快速的进行javabean构造。
文字游戏的简单应用
我们可以设置一个文字游戏,通过血量,攻击力等为对象创建属性,然后循环攻击最后输出结果。
类文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| package com.bayeeaa.demo1.d3;
import java.util.Random;
public class Role { private int blood; private String name;
String[] attack_desc = { "虚弱地", "小心地", "用力地", };
String[] injureds_desc = { "他似乎自信满满", "他认为还有胜算", "他还不肯认输", "他疲惫不堪" };
public Role() { }
public Role(int blood, String name) { this.blood = blood; this.name = name; }
public int getBlood() { return blood; }
public void setBlood(int blood) { this.blood = blood; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int get_attack_desc(int hurt) { if(hurt<=5 && hurt>0) return 0; else if (hurt<=10 && hurt>5) return 1; else if (hurt<=20 && hurt>10) return 2; return 0; };
public int get_injureds_desc(int remain) { if(remain<=100 && remain>=80) return 0; if(remain<80 && remain>=50) return 1; if(remain<50 && remain>=20) return 2; if(remain<20 && remain>=0) return 3; return 0; }
public void attack(Role role){ Random r = new Random(); int hurt = r.nextInt(20) + 1; int remainblood = role.getBlood() - hurt; remainblood = remainblood < 0 ? 0 : remainblood; role.setBlood(remainblood); System.out.println(this.getName() + attack_desc[get_attack_desc(hurt)] + "打了" + role.getName() + "" + hurt + "点血," + role.getName() +"还剩" + role.getBlood() + "," + injureds_desc[get_injureds_desc(remainblood)]); } }
|
主入口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package com.bayeeaa.demo1.d3;
public class RoleTest { public static void main(String[] args) { Role r1 = new Role(100,"500c"); Role r2 = new Role(100,"joker"); while(true){ r1.attack(r2); if(r2.getBlood() == 0){ System.out.println(r1.getName() + " Win"); break; } r2.attack(r1); if(r1.getBlood() == 0){ System.out.println(r2.getName() + " Win"); break; } } } }
|
其中一次运行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| 500c用力地打了joker11点血,joker还剩89,他似乎自信满满 joker用力地打了500c16点血,500c还剩84,他似乎自信满满 500c虚弱地打了joker4点血,joker还剩85,他似乎自信满满 joker用力地打了500c17点血,500c还剩67,他认为还有胜算 500c虚弱地打了joker4点血,joker还剩81,他似乎自信满满 joker用力地打了500c16点血,500c还剩51,他认为还有胜算 500c小心地打了joker7点血,joker还剩74,他认为还有胜算 joker用力地打了500c19点血,500c还剩32,他还不肯认输 500c用力地打了joker17点血,joker还剩57,他认为还有胜算 joker虚弱地打了500c4点血,500c还剩28,他还不肯认输 500c小心地打了joker10点血,joker还剩47,他还不肯认输 joker虚弱地打了500c1点血,500c还剩27,他还不肯认输 500c用力地打了joker19点血,joker还剩28,他还不肯认输 joker用力地打了500c16点血,500c还剩11,他疲惫不堪 500c小心地打了joker7点血,joker还剩21,他还不肯认输 joker虚弱地打了500c2点血,500c还剩9,他疲惫不堪 500c虚弱地打了joker5点血,joker还剩16,他疲惫不堪 joker小心地打了500c8点血,500c还剩1,他疲惫不堪 500c用力地打了joker17点血,joker还剩0,他疲惫不堪 500c Win
Process finished with exit code 0
|
可以看到我在类文件中先是设置了name和blood两个参数,而其攻击值是随机生成的。我也在类函数中加入了attack_desc和injureds_desc两个字符串数组来形容当前两人的状态。具体解释看代码中的注释。