封装在java中有两种表现
创新互联主营囊谦网站建设的网络公司,主营网站建设方案,成都App定制开发,囊谦h5微信小程序搭建,囊谦网站营销推广欢迎囊谦等地区企业咨询
1.用类封装一个事物的属性和方法。
2.用方法来封装一个固定的算法。
楼上所说的其实是封装的程度不一样,在面向对象的术语中粒度来表示这个程度。
封装其实是要看情况而定的,如果你这个类是描述人的,需要这个人完成一些基本的动作,如吃饭,走路,那么就不用把细胞也封装进来。但是如果“人”这个类,需要做医学的研究用,那么就需要封装细胞这个属性了。
代码打多了就自然能理解了,不是一个复杂的概念。呵呵。
说给人家听,我们就说的通俗简单点: 代码封装的好处:第一点在于安全,JAVA中类的一个属性,我们一般会在类中将其私有化然后getter和setter方法对外提供得到和设置的方法,这就好比自动存提款机,钱就是我们要的属性,要的数据,放在那直接去拿可以吗?很明显不行,所以自动存提款机提供了取钱的方法和存钱方法,而你不用知道钱从哪来要到哪里去。第二点在于方便:方法也是封装的一种体现,有一个功能我们要反复调用,每次写同样的代码吗?答案很明显,不要!,我们写个方法,把这段功能代码封装成一个方法,需要的时候调用方法名就可以了,不是吗? 关于package:如果一个项目很大的话,会分成很多小组,每个小组会有很多开发人员,大家在编写代码时说不定会出现同样的类名,问题就来了,我在调类的时候,调的是哪个?所以每个小组用不同的包名,这样来区分类所在的位置。好,如果你说项目编码之前详细设计说的很清楚了,类不可能出现同名,那么包的另外一个好处在于相似用途的类放在一个包下可以方便管理和查找,比如java.util包,如查没有包的存在,我想查API看有哪些集合框架,你说方便不 权限修饰符的作用就是:你很有钱,你愿意告诉谁你很有钱需要的时候可以来找你,你的亲属?你的儿子?还是全世界的所有人?你自己有必要告诉谁 那么他们缺钱的时候就会想到你
封装就是隐藏实现细节
将属性私有化
提供公有方法访问私有属性。
类是基于面向对象思想编程语言的基础
程序员可以把具有相同业务性质的代码封装到一个类里
通过接口方法向外部代码提供服务
同时向外部代码屏蔽类里服务的具体实现方式。对象是类的实例
类一般是个抽象名词
比如“人类”
而对象则是具体的物质存在
比如“张三”
这个人。在现实生活中
经常会遇到“类”
和“对象”
这些概念
比如封装了能实现“全自动洗衣机”
功能的洗衣机类。这里
用户可以使用面板上的按钮
使用该类里提供的洗衣等服务并且
由于该类实现了封装
所以在使用的时候
用户可以不用了解其中的自动洗衣原理以及实现机制。
类是同一种类型的对象的抽象
是某种类型对象的概述和定义
而对象则是某个类的实例化结果或者叫一种类型的实体。在使用面向对象的思想进行软件开发的过程中
首先得抽出项目的实体-对象模型
即首先是实体类的定义、封装。
这段代码也是醉了,你存入list应该是一个对象Person,
而你给一组数组赋值我也是没搞懂你的意思,
你这样写代码能存入list集合的只是一个Person对象,而你给对象字段赋值的语句就只有p.name = s.next(); p.pingjun = (rr / (a.length - 1)) + "";,只有2个属性付了值,其他的没有赋值是null;
一个构造器给Person的数组赋值?一个长度20的字符空数组,然后你给w数组赋值,那么你这样子赋值你以为可以影响到Person的值?w[i] = u + "";这句代码,与Person对象没半毛钱关系,对象引用都没有怎么赋值,
你最后打印的是Person对象的字段,而你存入一个空数组,然后把string类型字段的原始属性给一个数组,Person(String r[]) {
r[1] = this.yuwen;
r[2] = this.shuxve;
r[3] = this.wuli;
r[4] = this.waiyu;
r[5] = this.huaxve;
}
这有啥用,我很好奇你这个r数组也不是类中的字段,你给他付了null的值,你给他传入的是长度20的数组,后面还有15个长度呢,不管这个,关键是这个数组啥用也没有除了浪费内存
下面这段代码中list.add(p);,你把Person 对象存入list,此时的Person 对象被赋值的就只有2个字段,你给w,r数组的值无法影响到Person 对象,且这个方法执行完毕后,也会被清理掉因为没有被引用到
这个时候可以回答你的问题了,为什么你输入的分数显示都是null:
因为他都没被赋值到Person 的成员变量上面,没被赋值的成员变量的String值是null,容易你打印Person 未被赋值的成员变量的值,就是null;
String r[] = new String[a.length - 2];
String w[] = new String[20];
int rr = 0;
Person p = new Person(w);
p.name = s.next();
for (int i = 1; i a.length - 1; i++) {
int u = s.nextInt();
w[i] = u + "";
r[i - 1] = u + "";
rr += u;
}
p.pingjun = (rr / (a.length - 1)) + "";
list.add(p);
public class Man {
//这里是对属性的封装,一个人的姓名,年龄,妻子都是这个对象(人)的私有属性
private String name;
private int age;
private Woman wife;
//这里是对改人对外界提供方法的封装,可以设置改男人的妻子,姓名,年龄也可以获取改男人的姓名和年龄
public void setWife(Woman wife) {
this.wife = wife;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Woman {
//同样这里是属性封装
private String name;
private int age;
private Man husband;
//方法封装
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Man getHusband() {
return husband;
}
public void setHusband(Man husband) {
this.husband = husband;
}
}
/**
* 仔细看就会发现,Man类没有提供getWife的方法,这是以为男人不想让自己的妻子被外界访问,
*
* 直接下来呢,就是封装可以吧一个对象的属性私有,而提供一些可以被外界访问的属性的方法,
*
* 比如说,name属性,Man和Woman类都有相应的get和set方法,外界都可以通过这些方法访问和修改
*
* 同时对一些改对象不想让外界访问的属性,就不提供其方法,比如说Man的wife属性,就没有get方法
*
* 外界是不能带到Man类的wife属性的
*
* 呵呵
* 奇怪的是Woman类有husband的get方法,这就是封装的一点,还有的其他朋友也说到了
*/