返回
首页>资讯

能不能用类封装属性

时间: 2023-03-26 20:05:02

能不能用类封装属性

可以使用类封装属性,普通基类型可以只有属性而没有方法。将类定义为virtual即可使其子类继承或覆盖,若定义为抽象abstract的基类,则其强制子类进行覆盖并实现,若用接口定义属性,实现时,与abstract抽象类一样,强制子类对其进行实现。

求高手指导JAVA封装技巧,本人封装的太差了,有时自己头都昏了

封装性是整个面向对象的第一大特性,所谓的封装性几是指类内部的操作对外部不可见。
范例:观察如下的程序问题
class Person { // 类名称的单词首字母必须大写
String name ; // 姓名,是一个字符串所以使用String
int age ; // 年龄是一个整数,所以使用int
public void tell(){ // 定义一个方法
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
}
public class ClassDemo {
public static void main(String args[]){
Person per = new Person() ;
per.name = "张三" ;
per.age = -30 ;
per.tell() ;
}
}
此时的程序从技术(语法)上而言没有任何的问题,但是从实际的生活(业务)上来看,一个人的年龄绝对不可能是-30岁,所以这个时候造成问题的主要原因就是类中的操作对外部可见。
此时,就可以通过封装性来解决此类问题,如果现在要想对类中的属性或方法封装,可以直接使用private关键字完成。
class Person { // 类名称的单词首字母必须大写
private String name ; // 姓名,是一个字符串所以使用String
private int age ; // 年龄是一个整数,所以使用int
public void tell(){ // 定义一个方法
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
}
public class ClassDemo {
public static void main(String args[]){
Person per = new Person() ;
per.name = "张三" ;
per.age = 99999 ;
per.tell() ;
}
}
此时,程序编译之后出现了以下的错误信息:
ClassDemo.java:11: name has private access in Person
per.name = "张三" ;
^
ClassDemo.java:12: age has private access in Person
per.age = 99999 ;
^
2 errors
由于name和age两个属性被private声明了(封装了,私有)所以,现在根本无法被外部所访问,很明显,此时的属性绝对安全,但是封装归封装了,一个问题就出现了,现在的属性无法操作了,无法操作就没有意义了,所以此时,就可以给出一个概念,以后凡是类中的属性在定义的时候必须封装,封装之后的属性一定要通过setter、getter方法设置和取得。Setter和getter方法本身有自己的命名规范。
• 例如:private String name ;
• setter:public void setName(String na)
• getter:public String getName()
class Person { // 类名称的单词首字母必须大写
private String name ; // 姓名,是一个字符串所以使用String
private int age ; // 年龄是一个整数,所以使用int
public void setName(String n){
name = n ;
}
public void setAge(int a){
age = a ;
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
public void tell(){ // 定义一个方法
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
}
public class ClassDemo {
public static void main(String args[]){
Person per = new Person() ;
per.setName("张三") ;
per.setAge(99999) ;
per.tell() ;
}
}
此时,虽然是通过setter和getter方法间接的访问了私有属性,但是却没有检验,一旦需要检验,则检验的操作应该放在setter语句之中。
所有的设置应该在setter中完成,而getter方法只是将内容简单的返回即可。
class Person { // 类名称的单词首字母必须大写
private String name ; // 姓名,是一个字符串所以使用String
private int age ; // 年龄是一个整数,所以使用int
public void setName(String n){
name = n ;
}
public void setAge(int a){
if(a>0 && a<200){
age = a ;
}
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
public void tell(){ // 定义一个方法
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
}
public class ClassDemo {
public static void main(String args[]){
Person per = new Person() ;
per.setName("张三") ;
per.setAge(99) ;
per.tell() ;
}
}
此时,就通过封装性解决了设置错误内容的问题。
一定要注意的是,封装性出了在属性声明上外,也可以在方法上声明。
private void info(){ // 私有方法
System.out.println("*************************") ;
}
public void tell(){ // 定义一个方法
this.info() ;
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
如果现在调用的是本类中的方法,可以通过“this.方法()”的形式访问。
这个是MLDN李兴华老师将封装性的时候介绍的,你可以看下

为什么对java类进行封装,封装的原则是什么

封装的作用大概有两个:

对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。

对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。

通俗点说就是把一个对象下的属性概括起来,外部通过此对象来访问该对象下的属性,而开发人员可以通过控制属性的权限控制外部的访问权限,即可以控制哪些可以给外部访问哪些不行,可以起到很好的隐藏作用。


至于封装的原则主要是靠经验吧,只要尽力让封装的每个类里面的属性和方法独立,方便以后操作,减少耦合性就好了。

spring如何将请求参数封装到实体类的map属性中

1 前端 使用 h5与 jquery 发送post请求

2 后端定义接收 参数的类型 注意的是 BaseDTO 中的map属性与前端 定义的名称要一致queryParams

3 前后联调的时候 可能会有跨域问题

C#中如果在类中用下面代码用private封装属性 如何在主方法中设置该属性????

请问,你为什么不公开这些属性?既然读和写都不公开,为什么不干脆直接使用私有字段,这不是更方便吗?

java可以写方法,C#也有方法啊。自己写一个方法。

public void SetName(string name)
{
    this.Name = name;
} 或者干脆在构造函数里就指定name:

public Person(string name)
{
    this.Name = name;
}

声明: 我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本站部分文字与图片资源来自于网络,转载是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:daokedao3713@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

猜你喜欢

本站内容仅供参考,不作为诊断及医疗依据,如有医疗需求,请务必前往正规医院就诊
祝由网所有文章及资料均为作者提供或网友推荐收集整理而来,仅供爱好者学习和研究使用,版权归原作者所有。
如本站内容有侵犯您的合法权益,请和我们取得联系,我们将立即改正或删除。
Copyright © 2022-2023 祝由师网 版权所有

邮箱:daokedao3713@qq.com

备案号:鲁ICP备2022001955号-4

网站地图