一、课前分享/*------------------------------------------------------*/
早:
浮点数
中:
this的发明
简化自己给自己赋值的传参步骤
new的第二步需要this
成员代码块在构造器调用时只会加入在最深层的构造器中。
SVM
线性和非线性
晚:
nextInt()
undo与redo,安全模式下可以恢复原点()
PCA-降维算法
二、上课内容/*------------------------------------------------------*/
上午:
继承 : 子承父业
多个实体类中存在很多重复的(属性,功能),提高代码复用性
为什么使用继承 :
为了提高代码的复用性
如何使用继承 :
父类|基类|超类 : 子类的共性(属性,共性)
子类|派生类 : 对象的共性
子类 extends 父类
注意 :
单继承机制,一个子类只能存在一个直接父类,但是一个父类可以存在多个子类
优点 : 简化结构,使用简单
缺点 : 不灵活,不便于后期维护
子类一旦继承父类,有权使用父类的成员
extends 延续+扩展
访问权限修饰符 :
都是成员修饰符,只能修饰成员,不能修饰局部的成员修饰符
注意 :
能够修饰的类的访问权限修饰符 : public | default
最常用的访问权限修饰符 : public | private
面相 对象设计原则之一 : 开闭原则 对修改关闭,对扩展开放
重载与重写之间的区别 : *****
共同点 : 都是方法的特性
不同点 :
重载 Overload :
1.一个类中的多个方法
2.方法名相同
3.参数列表不同|方法签名不同
重写 Override :
1.两个类中的两个方法
2.继承|实现关系
3.方法签名完全相同
使用重写的前提 :
当子类从父类中继承了功能,功能满意,功能实现不满意的时候,可以在子类中对这个继承的功能重新实现-->重写
调用 :
如果子类中存在重写方法,会调用子类中重写的方法,对父类中被重写的方法进行屏蔽
检测方法是否是重写方法 :
1.在重写方法的行号的后面存在提示显示 O↑
2.强制检测一个方法是否为重写方法
@Override
不能被重写的方法 :
1.private修饰的方法不能被重写
私有方法可以被继承,但是无权访问
2.被final修饰的方法不能被重写
3.静态方法不能被重写
如果子类中存在于父类静态方法同名的方法,要求子类中的这个方法也要为静态的
重写的实现要求 : == <= >=
1.==方法签名完全相等
2.<= 返回值类型
基本数据类型|void : 重写方法的返回值类型 == 被重写方法的返回值类型
引用数据类型 : 重写方法的返回值类型<=被重写方法的返回值类型
3.>= 重写方法的访问权限修饰符>=被重写方法的访问权限修饰符
final : 最终的
被final修饰的变量为常量
被final修饰的方法不能被重写
被final修饰的不能被继承(太监类)
三、代码练习/*------------------------------------------------------*/
今天将的有继承,权限修饰符,super关键字,final关键字等等,没什么典型的练习。晚自习敲代码的时候自己练习了加密,解密,双色球彩票和文字战斗游戏,还比较有意思,分享给大家^_^
加密,解密
package youjixian01a.com.treepomelo.basepractice;
public class Encription {
public static void main(String[] args) {
/**
* 需求:
* ●某系统的数字密码(大于0),比如1983,采用加密方式进行传输。
* 规则如下:
* 先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数。
* */
int n = 198351;
int count = 1;
int temp = n;
while(temp>10){
temp/=10;
count++;
}
int[] a = new int[count];
//得到每位数
for (int i = 0; i < count; i++) {
a[i]=n%10;
n/=10;
}
//每位数都加上5
//对10求余
for (int i = 0; i < count; i++) {
a[i]+=5;
a[i]%=10;
}
//将所有数字反转
for (int i = 0;i<count; i++) {
System.out.print(a[i]);
}
System.out.println();
//将数组转换为字符串,再转换为整数
String str = "";
for (int i = 0;i<count; i++) {
str+=a[i];
}
n = Integer.valueOf(str);
//解密
Deciphering.deciphering(n);
}
}
class Deciphering{
static void deciphering(int n){
int count = 1;
int temp = n;
while(temp>10){
temp/=10;
count++;
}
int[] a = new int[count];
//得到每位数
for (int i = 0; i < count; i++) {
a[i]=n%10;
n/=10;
}
//大于等于5时-5,否则+5
for (int i = 0; i < count; i++) {
if(a[i]>=5)
a[i]-=5;
else
a[i]+=5;
}
//将所有数字反转
for (int i = 0;i<count; i++) {
System.out.print(a[i]);
}
}
}
双色球彩票:
package youjixian01a.com.treepomelo.basepractice;
import java.util.Random;
import java.util.Scanner;
import static youjixian01a.com.treepomelo.basepractice.Snatch.exist;
/**
* 投注号码由6个红色球号码和1个蓝色
* 球号码组成。红色球号码从1一33中选
* 择;蓝色球号码从1一16中选择。
* 双色球中奖条件和奖金表*/
public class RedBlueBall {
public static void main(String[] args) {
//生成中奖号码
int[] arr = creatNumber();
// for (int i : arr) {
// System.out.print(i+" ");
// }
//System.out.println();
//用户输入号码
//红球
int[] user = new int[7];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < user.length-1;) {
System.out.print("请输入第"+(i+1)+"个红球号码:");
int temp = sc.nextInt();
//判断是否在范围内
if(temp>=1&&temp<=33)
//判断是否重复
{
if(!exist(user,temp))
user[i++] = temp;
else
System.out.println("您输入的红球号码重复...");
}
else
System.out.println("您输入的红球号码超出范围...");
}
//蓝球
while(true){
System.out.println("请输入蓝球号码:");
int temp = sc.nextInt();
if (temp >= 1 && temp <= 16)
{
user[user.length - 1] = temp;
break;
}
else
System.out.println("您输入的蓝球号码超出范围...");
}
//判断中奖情况
int redCount = 0;
int blueCount = 0;
for (int i = 0 ;i<user.length-1;i++) {
if(exist(arr,i))
redCount++;
}
if(user[user.length-1]==arr[arr.length-1])
blueCount++;
System.out.println("红球中了"+redCount+"个");
System.out.println("蓝球中了"+blueCount+"个");
//判断出奖金金额(略)
}
private static int[] creatNumber() {
//redball
int[] a = new int[7];
Random r = new Random();
for (int i = 0; i < a.length-1;) {
//从1~33中抽取号码
int temp = r.nextInt(33)+1;
//号码不存在,插入red中
if(!exist(a,temp)){
a[i++] = temp;
}
}
//blueball
a[a.length-1] = r.nextInt(16)+1;
return a;
}
}
文字战斗游戏
package youjixian01a.com.treepomelo.basepractice;
import java.util.Random;
/**
* 容颜:
* String0 boyfaces="风流俊雅","气宇轩昂","相貌英俊","五官端正","相貌平平","一塌糊涂",面目狰狞"
* String[]girlfaces="美奂绝伦","沉鱼落雁","婷婷玉立","身材娇好","相貌平平","相貌简陋","惨不忍睹":
*
* attack攻击描述:
* String[]attacks_desc={
* "%5使出了一招【背心钉】,转到对方的身后,一掌向%s背心的灵台穴拍
* "%5使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向%5。",
* "%5大喝一声,身形下伏,一招【劈雷坠地】,捶向%s双腿。",
* "%s运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向%5。",
* "%s阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向%5。",
* "%5上步抢身,招中套招,一招【劈挂连环】,连环攻向%5。"
* }:
* njured受伤描述:
* String[]injureds_desc=[
* "结果%s退了半步,毫发无损",
* "结果给%s造成一处瘀伤",
* "结果一击命中,%S痛得弯下腰",
* "结果%5痛苦地闷哼了一声,显然受了点内伤",
* "结果%S摇摇晃晃,一跤摔倒在地",
* "结果%s脸色,一下变得惨白,连退了好几步",
* "结果『轰』的一声,%s口中鲜血狂喷而出",
* "结果%5一声惨叫,像滩软泥般塌了下去”*/
public class Fight {
public static void main(String[] args) throws InterruptedException {
//创建人物
Bean b1 = new Bean("令狐冲",100,1);
Bean b2 = new Bean("赵敏",100,0);
//fight
while(true){
//判断速度(略)
b1.attack(b2);
if(b2.getBlood()<=0)
break;
Thread.sleep(1000);
b2.attack(b1);
if(b1.getBlood()<=0)
break;
Thread.sleep(1000);
}
}
}
class Bean{
private String name;
private int blood;
private int sex;//1为男,2为女
public Bean() {
}
public Bean(String name, int blood, int sex) {
this.name = name;
this.blood = blood;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
//status
static String[] boyfaces={"风流俊雅","气宇轩昂","相貌英俊","五官端正","相貌平平","一塌糊涂","面目狰狞"};//7
static String[] girlfaces={"美奂绝伦","沉鱼落雁","婷婷玉立","身材娇好","相貌平平","相貌简陋","惨不忍睹"};//7
static String[]attacks_desc={
"使出了一招【背心钉】,转到对方的身后,一掌向%s背心的灵台穴拍",
"使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向%s。",
"大喝一声,身形下伏,一招【劈雷坠地】,捶向%s双腿。",
"运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向%s。",
"阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向%s。",
"上步抢身,招中套招,一招【劈挂连环】,连环攻向%s。",
};//6
static String[]injureds_desc= {
"结果%s退了半步,毫发无损",
"结果给%s造成一处瘀伤",
"结果一击命中,%s痛得弯下腰",
"结果%s痛苦地闷哼了一声,显然受了点内伤",
"结果%s摇摇晃晃,一跤摔倒在地",
"结果%s脸色,一下变得惨白,连退了好几步",
"结果『轰』的一声,%s口中鲜血狂喷而出",
"结果%s一声惨叫,像滩软泥般塌了下去"};//8
public void attack(Bean b){
Random r = new Random();
int power = r.nextInt(20)+1;
String str = this.getName();
String status = "";
if(this.getSex()==1)
status = boyfaces[r.nextInt(boyfaces.length)];
else
status = girlfaces[r.nextInt(girlfaces.length)];
str+=status;
System.out.printf(str+","+attacks_desc[r.nextInt(attacks_desc.length - 1)],b.getName());
int remain = b.getBlood()-power;
b.setBlood(remain);
if(remain>=90)
System.out.printf(injureds_desc[0],b.getName());
else if(remain>=80)
System.out.printf(injureds_desc[1],b.getName());
else if(remain>=70)
System.out.printf(injureds_desc[2],b.getName());
else if(remain>=60)
System.out.printf(injureds_desc[3],b.getName());
else if(remain>=40)
System.out.printf(injureds_desc[4],b.getName());
else if(remain>=30)
System.out.printf(injureds_desc[5],b.getName());
else if(remain>=10)
System.out.printf(injureds_desc[6],b.getName());
else if(remain<=0)
System.out.printf(injureds_desc[7],b.getName());
System.out.println();
}
}