面向对象

面向对象

1.类的概念
* 类=数据(静态特征、属性信息)+动作(动态行为,方法(函数))
* 类是对象的抽象化概念,通过类来创建对象
* 类由:
* 包
* 导入的其他类
* 类声明{
* 属性
* 构造方法
* 方法
* }
* 等组成

2.类与对象
* 对象与对象之间之间的区别是:属性信息不同
* 类的对象也可以作为类的属性,包括其他类的对象和该类本身的对象
* 属性(全局变量):有默认初始化值
* 引用数据类型:null
* 整数类型:0
* 浮点型:0.0
* boolean:false
* char: \u0000
* static修饰的方法,使用类名.来调用
* 一般方法,使用对象.来调用
* 匿名类:如果一个对象只需要使用一次,可以使用下面的方式创建并直接使用,如果想使用多次,就需要起个名字(引用)

System.out.println(new Person("张三",20).name);
System.out.println(new Person("张三",20).age);

3.构造方法
构造方法:是一种特殊的方法
* 1、作用上特殊:用于创建对象,方式:new + 构造()
* 2、写法上:名称必须和类名一致,并且不能有返回值和返回值类型
* 3、如果一个类中没有定义任何的构造方法,则默认有无参构造方法,而如果定义了其他的非无参构造,则默认的无参构造不再提供
* 4、两个构造方法,同名且不同参,构成了构造方法的重载
* 5、new + 构造方法:用于创建对象,new 开辟的是堆内存空间,类的对象都是引用数据类型
* 利用全参构造,给属性赋值完成属性初始化;

Person p2 = new Person("李四",30,180,100);
  • 通过构造方法+属性赋值,完成对象属性的初始化
Person p3 = new Person("王五",20);
p3.height = 180;
p3.weight = 110;

4.this关键字
this,称为本类对象
* this(参数),表示调用本类的其他构造方法,完成属性的初始化
* this.来调用本类的属性:当一个方法中,有和属性一样的形式参数或局部变量时,方法中对该变量使用时,使用的是形式参数或局部变量

public class Person {
    String name;
    int age;
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
}
  • this.来调用本类的一般方法
  • 实现构造方法之间的相互调用,注意要避免构造方法相互调用的死循环问题

5.封装
* 完全封装:也是一种规范 JavaBean(咖啡豆)
* 1、属性全部私有
* 2、为每一个属性均提供统一的访问方式:存入(指定)和取出,目的是为了数据的安全性
* 3、提供无参构造和全参构造
* 4、实现序列化接口
* 使用封装解决数据不安全问题,处理非法数据或脏数据,如对年龄属性赋值-200

6.应用实例

package cn.ucai.day08.p4;

import java.util.Random;
import java.util.Scanner;

public class Orc {// 怪物类
    String name;
    int hp;
    int lv;
    public Orc(){// 无参构造方法

    }

    public Orc(String name,int hp,int lv){// 全参构造方法
        this.name = name;
        this.hp = hp;
        this.lv = lv;
    }

    public void desc(){// 一般方法
        System.out.println(this.name+":"+this.hp+":"+this.lv);
    }

    public static void main(String[] args) {// 主方法
        // 定义了一个长度为20的Orc数组
        Orc[] orcArr = new Orc[20];
        String[] orcNamesArr = {"北京怪", "成都怪", "武汉怪"};
        // 北京怪 成都怪 武汉怪 1-5级 100-500生命值
        Random ran = new Random();
        for(int i=0;i<orcArr.length;i++){// 完成20个小怪的创建和属性的初始化工作
            // 随机小怪名字下标
            int index = ran.nextInt(3);
            int niLv = ran.nextInt(5)+1;
            orcArr[i] = newOrc(orcNamesArr[index],niLv*100,niLv);
            orcArr[i].desc();
        }
        // 对象属性值的变化
        Scanner scan = new Scanner(System.in);
        System.out.println("请按数字1,释放\"血战八方\"技能");
        int input = scan.nextInt();
        if(input==1){
            System.out.println("你使出了\"血战八方\"");
            for(int i=0;i<orcArr.length;i++){
                if(orcArr[i].hp<=300){
                    System.out.println("等级为"+orcArr[i].lv+",血量为"+orcArr[i].hp+"的"+orcArr[i].name+"被秒杀了");
                }else{// 等级为4或5的orc
                    orcArr[i].desc();
                    orcArr[i].hp -= 300;
                    System.out.print("被扣300点血之后的:");
                    orcArr[i].desc();
                }
            }
        }
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值