linkin大话面向对象--封装和隐藏
- 软件开发追求的境界:高内聚,低耦合
高内聚:尽可能把模块的内部数据,功能实现细节隐藏在模块内部独立完成,不允许外部直接干预
低耦合:仅暴露少量的方法给外部使用
- 到底为什么要对一个雷或者对象实现良好的封装,可以实现以下目的:
1,隐藏类的实现细节
2,让使用者只能通过实现预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对属性的不合理访问
3,还可以进行数据检查,有利于保证对象信息的完整性
4,便于修改,提高代码的可维护性
- 为了实现良好的封装,需要从2个方面来考虑
1,把对象的属性和实现细节隐藏起来,不允许外部直接访问
2,把方法暴露出来,让方法来控制对这些属性进行安全的访问和操作
去餐馆吃饭,我们只要能吃到菜就OK了,至于这个厨师长啥样,单眼皮还是双眼皮,怎么做的菜,用了什么牌子的地沟油,我们都没必要知道。我们使用的电脑其实就是体现了封装的思想,它里面什么网卡,声卡是怎么插放的,怎么设计的,我们不要知道,我们只需打开电脑就可以用了。这就如同找一个人来修电脑,只需要知道修好了还是没修好。至于他怎么修的可以不用了解。可是封装好了,外界怎么使用呢?(向外暴露一些简单的入口,供使用)
方法是类中最小的封装体。那么类也一样是一种封装形式,有写方法需要暴露出去,有些就不用。
- 访问权限控制:
private:本类内部可以访问,不能继承到子类
default:本类内部可以访问,同包其他类也可以访问。同包可继承
protected:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问。能继承到子类
public:任何地方都可以访问 ,能继承到子类
以下图片整理的很好:
修饰符 |
类内部 |
同一个包 |
子类 |
任何地方 |
private |
√ |
|||
default |
√ |
√ |
||
protected |
√ |
√ |
√ |
|
public |
√ |
√ |
√ |
√ |
- 关于访问控制符的使用,存在以下原则:
1,类中的绝大部门属性都应该使用private修饰,只有一些static修饰的,类似全局变量的属性,才使用public
2,如果某个类主要用作其他类的父类,那么应该使用protected来修饰这个类的方法
3,希望暴露给其他类调用的方法使用public来修饰
注意了:如果一个java源文件里定义了一个public修饰的类,则这个源文件的文件名必须与public修饰的类的类名相同
- JavaBean规范:
一个类必须有一个参数为空的构造方法,所有的字段必须使用private修饰;并向外提供getter/setter。
若字段的第二个字母是小写的,把第一个字母变成大的,再加上get/set作为前缀(最常见的)。
若第二个字母是大写的,就保持原样再加上get/set(特殊)。
注意了:boolean 类型的变量没有getXX,只有 isXX;
以下是一个标准的javabean,代码如下:
/**
*
* @version 1L
* @author LinkinPark
* @since 2014-10-27
* @motto 梦似烟花心似水,同学少年不言情
* @desc ^封装实际上就是2个方面的含义:把该隐藏的隐藏起来,把该暴露的暴露出来
*/
public class JavaBean {
//使用private修饰,将这些属性隐藏起来,要是想修改这个类的属性,提供get和set方法
private String name;
private int age; public JavaBean(){ } public String getName() {
return name;
} public void setName(String name) {
//在这里还可以加入自己的逻辑判断
if("LinkinPark".equals(name)){
System.out.println("不可以的,林肯公园是偶的名字,不能随便拿来赋值");
return;
}else{
this.name = name;
}
} public int getAge() {
return age;
} public void setAge(int age) {
//保证自己写的类的属性不要出现与实际情况不符的情况
if(age>100 || age<0){
System.out.println("");
}else{
this.age = age;
}
} }
linkin大话面向对象--封装和隐藏的更多相关文章
- linkin大话面向对象--内部类
内部类说白了就是类中有类 内部类:嵌套类 外部类:宿主类 内部类主要有以下作用:记住了3个字:多继承... 1,内部类提供了更好的封装,可以把内部类隐藏在外部类中,不允许同一个包中的其他类访问该类. ...
- linkin大话面向对象--组合
继承是实现类重用的重要手段,但是它有一个最大的坏处:破坏封装.相比之下,组合也是实现类重用的重要方式,但是采用组合方式实现类重用则能提供更好的封装性.比如人有手一样,在人的类中增加一个手的属性. 何时 ...
- linkin大话面向对象--类和对象
我们每天在撸码,那么我们在敲什么东西呢?明显的我们在写类,写一个类,写一个接口,写某个接口里面写一些属性,在某个类里面写一个方法,然后以一个对象调用方法,对于j2ee来讲的话,可能还会写一些jsp,静 ...
- linkin大话面向对象--闭包和回调
先来理解2个概念:闭包和回调 什么是闭包? 闭包是一个可调用的对象,它记录了一些信息,这些信息来自于创建他的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为他不仅包含了外部类对象的信 ...
- linkin大话面向对象--多态
java引用变量有2个类型,一个是编译时类型,一个是运行时类型: 编译时类型:声明的类型,把它看做是什么东西 运行时类型:真正的类型,实际上指的是什么东西 如果编译时类型和运行时类型不同,就出现多态. ...
- linkin大话面向对象--继承
[修饰符] class SubClass extends SuperClass 按照这种关系,我们把SuperClass类称为父类或基类,把SubClass称为子类或派生类或拓展类.extend ...
- linkin大话面向对象--构造器详解
对象的产生格式:类名称 对象名 = new 类名称(); 因为有(),所以是方法,实际上它就是构造方法,并且是非私有的构造方法.如:CellPhone cp = new CellPhone( ...
- linkin大话面向对象--GC和jar包
GC java的垃圾回机制是java语言的重要机制之一.当程序创建对象,数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存区中.当这块内存不再被任何变量引用时,这块内存就 ...
- linkin大话面向对象--枚举
枚举类(enum) 其实我们使用到枚举的地方还是很多的,其实我们可以完全人工的来实现枚举的功能.比如说我现在手里的项目我就是自己实现的枚举,说白了,枚举就是一个类的多例模式. 1,使用enum声明,默 ...
随机推荐
- 浮动(float)与清除浮动(clear)
上一篇中我们了解了块级元素与内联元素,今天将自己查阅的资料整理写出来,与大家一起理解什么是浮动,以及怎样清除浮动,本文以div元素为例. 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮 ...
- Android系统上如何实现easyconfig(airkiss)
刚买回来一个智能音箱和博联,需要给音箱和博联配置联网,音箱需要先打开蓝牙,然后在手机app中填写wifi的ssid和密码,通过蓝牙发送到音箱,音箱收到后连接到wifi. 博联就比较奇怪,进入联网模式以 ...
- gradle学习记录
一.Gradle简介 Gradle是Android现在主流的编译工具,虽然在Gradle出现之前和之后都有对应更快的编译工具出现,但是Gradle的有时就在于它是亲儿子,Gradle确实比较慢,这和它 ...
- 【java开发系列】—— 集合使用方法
一.首先看一下集合的框架图: 由于collection也继承了Iterator和comparable接口,因此我们可以使用Iterator来遍历元素,也可以通过自定义compareTo函数来重新编写自 ...
- deeplearning.ai 人工智能行业大师访谈 Pieter Abbeel 听课笔记
1. Pieter Abbeel小时候想做一个篮球运动员 - -!上学的时候喜欢数学和物理,上大学之后很自然的学工程.Pieter定义工程问题是"解决实际中应用物理和数学的问题". ...
- codechef [snackdown2017 Onsite Final] Minimax
传送门 题目描述 考虑一个 N 行 N 列的网格,行列编号均为 1 ∼ N.每个格子中包含一个整数.记 ri 为第 i 行的最小值,Ci 为第 i 列的最大值.我们称一个网格为好的,当且仅当满足:$$ ...
- 数位DP入门:(bzoj1833+3209)
//我是来看文章创建时间的= = 膜拜了一下蔡大神.... 人生第一道自己写的数位DP...好吧以前是看题解然后也不知道为什么就过了的>_< 虽然说现在还是只会裸题= = 数位DP介绍: ...
- [bzoj3048] [Usaco2013 Jan]Cow Lineup
一开始一脸懵逼.. 后来才想到维护一左一右俩指针l和r..表示[l,r]这段内不同种类的数字<=k+1种. 显然最左的.合法的l随着r的增加而不减. 顺便离散化,记一下各个种类数字出现的次数就可 ...
- hdu3076—概率dp
hdu3076-概率dp 标签 : 概率dp 题目链接 题意: 2个人分别有AB的血数,轮流扔骰子,数小的自减一血,平的不变,谁先到减0, 谁输,问A赢的概率. 题解: dp[i][j]表示的是第一个 ...
- Java大数应用
1.大数加法 import java.math.BigInteger; import java.util.Scanner; public class Main { public static void ...