面向对象

来源:互联网 发布:股权众筹系统源码 编辑:程序博客网 时间:2024/06/08 11:32

面向对象

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();                }            }        }    }}
0 0
原创粉丝点击