对象的封装

news/2025/1/13 3:03:36/

示例如下:

package com.hy;
/*
面向对象的特征一:封装与隐藏
一:问题的引入:
当我们创建一个类的对象以后,我们可以通过“对象.属性”的方式,对对象的属性进行赋值,
这里,赋值操作要受到属性的数据类型和存储范围制约,除此之外,没有其他制约条件。但是,在实际问题中,我们往往需要给属性赋值。
加入额外的限制条件,这个条件就不能在属性声明时体现,我们只能通过方法进行限制条件的添加(比如:setLegs)
同时,我们需要避免用户再使用“对象.属性”的方式对属性进行赋值,则需要将属性声明为私有的(private)
二:封装性的体现:
我们将类的属性私有化(private),同时,提供公共的方法来获取(getxxx)和设置(setxxx)此属性的值。
拓展:封装性的体现,(1)如上(2)不对外暴露的私有方法*/
public class F_ {public static void main(String[] args) {Animal animal = new Animal();animal.setAge(99);animal.name="gog";animal.setLegs(6);animal.eat();animal.show();System.out.println(animal.getLegs());System.out.println(animal.getAge());}
}class Animal{private String name;private   int age;private int legs; //腿的个数public void  eat(){System.out.println("动物进食");}public  void show(){System.out.println("name="+name+",age="+age+",legs="+legs);}public  void  setLegs(int l){if(l>=0&l%2==0){legs=l;}else {legs=0;}}public  int getLegs( ){return legs;}public void setAge(int m){if(m>=0){age=m;}else {age=0;}}public int getAge(){return age;}public void setName(int n){if(name)}
}

运行之后如下所示:

 我们程序设计追求“高内聚,低耦合”

高内聚:类的内部数据操作细节自己完成,不允许外部干涉

低耦合:仅对外暴露少量的方法用于使用

权限的问题:

隐藏对象内部的复杂性,只对外公开简单的接口,便于外界调用,从而提高系统的可扩展性、可维护性,通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来,这就是封装性的设计思想。

类内部同一个包不同包的子类同一个工程
privateyes
缺省yesyes
protectedyesyesyes
publicyesyesyesyes
//同一个包中的同一个类,可以调用私有(private)的属性、方法
//同一个包中的其他类,不可以调用Order类中私有(private)的属性、方法
//同一个包中的其他类,可以调用Order类中缺省、protected、public的属性、方法
///在不同包的子类中,不可以调用Order类中私有(private)和缺省权限的属性、方法
//在不同包的子类中,可以调用Order类中protected和public的属性、方法
//不同包下的普通类(非子类)要使用order类,不可以调用声明为private、缺省、protected的权限的属性、方法
package com.hy;
/*
面向对象的特征一:封装与隐藏
一:问题的引入:
当我们创建一个类的对象以后,我们可以通过“对象.属性”的方式,对对象的属性进行赋值,
这里,赋值操作要受到属性的数据类型和存储范围制约,除此之外,没有其他制约条件。但是,在实际问题中,我们往往需要给属性赋值。
加入额外的限制条件,这个条件就不能在属性声明时体现,我们只能通过方法进行限制条件的添加(比如:setLegs)
同时,我们需要避免用户再使用“对象.属性”的方式对属性进行赋值,则需要将属性声明为私有的(private)
二:封装性的体现:
我们将类的属性私有化(private),同时,提供公共的方法来获取(getxxx)和设置(setxxx)此属性的值。
拓展:封装性的体现,(1)如上(2)不对外暴露的私有方法(3)单例模式三、封装性的体现,需要权限修饰符来配合
1.Java规定的4种权限,(从小到大排列),private、缺省(default,什么也不写)、protected、public
2.4种权限可以用来修饰类及类的内部结构、属性、方法、构造器、内部类
3.具体的,4种权限都可以用来修饰类的内部结构、属性、方法、构造器、内部类
修饰类的话,只能使用:缺省、public*/
public class F_ {public static void main(String[] args) {Animal animal = new Animal();animal.setAge(99);animal.setLegs(6);animal.eat();animal.show();System.out.println(animal.getLegs());System.out.println(animal.getAge());}
}class Animal{private String name;private   int age;private int legs; //腿的个数public void  eat(){System.out.println("动物进食");}public  void show(){System.out.println("name="+name+",age="+age+",legs="+legs);}public  void  setLegs(int l){if(l>=0&l%2==0){legs=l;}else {legs=0;}}public  int getLegs( ){return legs;}public void setAge(int m){if(m>=0){age=m;}else {age=0;}}public int getAge(){return age;}}

 权限:

package com.hy;
/*
面向对象的特征一:封装与隐藏
一:问题的引入:
当我们创建一个类的对象以后,我们可以通过“对象.属性”的方式,对对象的属性进行赋值,
这里,赋值操作要受到属性的数据类型和存储范围制约,除此之外,没有其他制约条件。但是,在实际问题中,我们往往需要给属性赋值。
加入额外的限制条件,这个条件就不能在属性声明时体现,我们只能通过方法进行限制条件的添加(比如:setLegs)
同时,我们需要避免用户再使用“对象.属性”的方式对属性进行赋值,则需要将属性声明为私有的(private)
二:封装性的体现:
我们将类的属性私有化(private),同时,提供公共的方法来获取(getxxx)和设置(setxxx)此属性的值。
拓展:封装性的体现,(1)如上(2)不对外暴露的私有方法(3)单例模式三、封装性的体现,需要权限修饰符来配合
1.Java规定的4种权限,(从小到大排列),private、缺省(default,什么也不写)、protected、public
2.4种权限可以用来修饰类及类的内部结构、属性、方法、构造器、内部类
3.具体的,4种权限都可以用来修饰类的内部结构、属性、方法、构造器、内部类
修饰类的话,只能使用:缺省、public
总结封装性:Java提供了4种权限修饰符来修饰类及类的内部结构,
体现类及类的内部结构在被调用时的可见性的大小*/
public class F_ {public static void main(String[] args) {Animal animal = new Animal();animal.setAge(99);animal.setLegs(6);animal.eat();animal.show();System.out.println(animal.getLegs());System.out.println(animal.getAge());}
}class Animal{private String name;private   int age;private int legs; //腿的个数public void  eat(){System.out.println("动物进食");}public  void show(){System.out.println("name="+name+",age="+age+",legs="+legs);}public  void  setLegs(int l){if(l>=0&l%2==0){legs=l;}else {legs=0;}}public  int getLegs( ){return legs;}public void setAge(int m){if(m>=0){age=m;}else {age=0;}}public int getAge(){return age;}}

构造器:

package com.hy;
/*
类的结构之三:构造器(或构造方法、constructor)的使用一、构造器的作用:
创建对象
二、说明:
1.如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器
2.定义构造器的格式,权限修饰符  类名(形参列表 )*/public class Person {String name;int age;//构造器public Person(){System.out.println("Person( )...");}public void  eat(){System.out.println("人吃饭");}public  void  study(){System.out.println("人可以学习");}
}
class PersonTest{public static void main(String[] args) {//创建类的对象 :new +构造器Person person = new Person();person.eat();}}

运行之后如下所示:

我们新建如下所示:

package com.hy;
/*
类的结构之三:构造器(或构造方法、constructor)的使用一、构造器的作用:
1.创建对象
2.初始化对象的信息
二、说明:
1.如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器
2.定义构造器的格式,权限修饰符  类名(形参列表 )
3.一个类中定义的多个构造器,彼此构成重载
4.一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器
5.一个类中,至少会有一个构造器。*/public class Person {String name;int age;//构造器public Person(){age=18;}public void setName(String n){name=n;}public String getName(){return name;}public Person(String n,int a){name=n;age=a;}public void  eat(){System.out.println("人吃饭");}public int getAge(){return age;}public  void  study(){System.out.println("人可以学习");}
}
class PersonTest{public static void main(String[] args) {//创建类的对象 :new +构造器Person person = new Person();System.out.println("年龄为:"+person.getAge());Person s = new Person("S", 5);Person person1 = new Person();}}

运行之后如下所示:

 总结:属性赋值的先后顺序

(1)默认初始化

   (2)显式初始化

(3)构造器中初始化

(4)通过“对象.方法”或“对象.属性”的方式,赋值

以上操作的先后顺序:(1)---(2)---(3)----(4)

JavaBean:

package com.hy;/*** javaBean是一种java语言写成的可重用组件。* 所谓javaBean,是指符合如下标准的Java类:* (1)类是公共的* (2)有一个无参的公共的构造器* (3)有属性,且有对应的get、set方法** 用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且* 其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。* 用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。*/
public class TriAngle {int age;public TriAngle() {}public void setAge(int a){age=a;}public int getAge() {return  age;}}

UML类图:

 最外层为包名,内部为类名

 1.+表示public类型,-表示private类型,#表示protected类型

 2.方法的写法: * 方法的类型(+、-) 方法名(参数名:参数类型):返回值类型


http://www.ppmy.cn/news/37013.html

相关文章

Vue|计算属性

1. 计算属性1.1 差值语法1.2 methods1.3 计算属性1. 计算属性 1.1 差值语法 开始前分别在项目目录创建文件夹及页面如下 需求1:在两个文本框中分别输入姓和名的同时需要在下方将数据进行拼接组装,效果如下图 如果用传统的方式来实现的话,需要…

【Dockerfile学习笔记】常用命令及参数意义

什么是 Dockerfile? Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 下面罗列一下常用的与镜像有关的命令: 列举本地的镜像:docker images 拉取镜像:docker pull tomcat …

线程池(2022-09-29)

文章目录前言一、线程池的常用构建方式1.构造方法实现(推荐)2.通过 Executor 框架的工具类 Executors 来实现(不推荐)3.Spring框架提供4.Guava,hutool的ThreadFactoryBuilder5.线程池的异常处理二、线程池核心 阻塞队列 BlockingQueue1.二级标题三、线程池异常1.try…

【理论推导】变分自动编码器 Variational AutoEncoder(VAE)

变分推断 (Variational Inference) 变分推断属于对隐变量模型 (Latent Variable Model) 处理的一种技巧,其概率图如下所示 我们将 X{x1,...xN}X\{ x_1,...x_N \}X{x1​,...xN​} 看作是每个样本可观测的一组数据,而将对应的 Z{z1,...,zN}Z\{z_1,...,z_N…

优漫动游影视后期学什么?

影视后期就是对前期拍摄的视频进行剪辑,对文字、调色、特效等后期处理,最终形成我们所看到的成片。   影视后期从应用划分,核心包括两个大的应用领域,影视剧方向和广告与包装方向,影视剧方向比如电视剧&#xff0c…

微服务架构(一)

系统架构 随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。 从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构--->集群应用架构--->垂直应用架构--->SOA 架构--->微服务架…

类ChatGPT平台推荐【国内访问ChatGPT4】

类ChatGPT平台推荐【国内访问ChatGPT】 1 ChatGPT介绍 ChatGPT是OpenAI开发出的一个人工智能模型。但是国内大部分人因为网络限制无法访问和使用。今天推荐国内访问途经。 ChatGPT作用: 回答问题信息搜索语言翻译文本生成文案编写代码编程助手创意写作 … 注意&am…

发现一个白嫖GPT4.0的方法!真的是完胜3.5!

大家好,我是五竹。 先说个基本的科普,最近被问的人都嘛了。 1、ChatGPT账号只有两种:普通账号和plus账号。 2、普通账号升级到plus账号,需要绑定国外的支付方式,每个月大概130左右!plus账号更稳!更快&am…