面向对象
来源:互联网 发布:股权众筹系统源码 编辑:程序博客网 时间: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(); } } } }}
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 【HDU】1025 - Constructing Roads In JGShining's Kingdom(LIS & 深坑)
- UVA - 548 Tree
- CodeForces 427A
- CodeForces 274A k-Multiple Free Set【思维】
- UVA - 297 Quadtrees
- 面向对象
- UVA301Transportation
- JS+CSS 实现 悬浮滚动广告
- Git知识整理
- poj1213Fantasy of a Summation(找规律,优化代码)
- FFT模板
- 原码补码反码之间的关系
- python 设置线程名
- mongodb c++ API