百无聊赖之JavaEE从入门到放弃(九)封装详解 多态详解
目录
一.封装
1.封装的作用和含义
2.编程中封装的具体优点:
3.封装的实现一使用访问控制符
4.关于protected的两个细节:
5.开发中封装的简单规则
6.javaBean
二.多态(polymorphism)
1.多态概念和实现
2.多态的要点
3.示例代码
一.封装
1.封装的作用和含义
我要看电视,只需要按一下开关和换台就可以了。有必要了解电视机内部的结构吗?有必要碰碰显像管吗?制造厂家为了方便我们使用电视,把复杂的内部细节全部封装起来,只给我们暴露简单的接口,比如:电源开关。具体内部是怎么实现的,我们不需要操心。需要让用户知道的才暴露出来,不需要让用户知道的全部隐藏起来, 这就是封装。说的专业一点,封装就是把对象的属性和操作结合为一个独立的整体, 并尽可能隐藏对象的内部实现细节。我们程序设计要追求“高内聚,低耦合"。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合是仅暴露少量的方法给外部使用,尽量方便外部调用。
2.编程中封装的具体优点:
提高代码的安全性。
提高代码的复用性。
“高内聚” :封装细节,便于修改内部代码,提高可维护性。
"低耦合”: 简化外部调用,便于调用者使用,便于扩展和协作。
3.封装的实现一使用访问控制符
Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。Java中4种“访问控制符”分别为private、default、 protected、 public ,它们说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。下面详细讲述它们的访问权限问题。其访问权限范围如下图所示。
(1)private表示私有,只有自己类能访问
(2)default表示没有修饰符修饰,只有同一个包的类能访问
(3)protected表示可以被同一个包的类以及其他包中的子类访问
注:public static 和 static的区别:
其实就是访问权限的区别,一个是public,一个是default。
4.关于protected的两个细节:
1.若父类和子类在同一个包中,子类可访问父类的 protected成员,也可访问父类对象的protected成员。
2.若子类和父类不在同一个包中,子类可访问父类的protected成员,不能访问父类对象的protected成员。
eg:
首先两个类在不同的包里。
代码:
Test1.java
public class Test1 {private int testPrivate=100;int testDefault=200;protected int testProtected=300;public void test(){System.out.println(this.testPrivate);//只有本类可以用私有成员System.out.println(this.testDefault);//同一个包的类就能用默认成员}
}
Test2.java
import com.company.Test.a.Test1;public class Test2 extends Test1{public void fun(){System.out.println(super.testProtected);//子类可访问父类的protected成员}public static void main(String[] args) {Test1 test1=new Test1();test1.test();Test2 test2=new Test2();test2.fun();//System.out.println(test.testProtected); 报错,即不能访问父类对象的protected成员}}
输出:
100
200
300
5.开发中封装的简单规则
一般使用private访问权限。
提供相应的 get/set方法来访问相关属性,,这些方法通常是public修饰的, 以提供对属性的赋值与读取操作(注意: boolean变量的get方法是is开头! )。
一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方法用public修饰。
6.javaBean
一个简单的javaBean例子:
函数直接右键--》Generate生成即可,也可快捷键Alt+Insert来快速打开Generate,idea很智能,如果没有用右键生成的话,直接打一个set或者get也会出来相应的快捷生成函数提示,不得不说idea是真的智能。
public class Person {private String age;private String name;private boolean flag;public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public boolean isFlag() {return flag;}public void setFlag(boolean flag) {this.flag = flag;}
}
二.多态(polymorphism)
1.多态概念和实现
多态指的是同一个方法调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法,具体实现会完全不同。比如: 同样是调用人的“休息”方法,张三是睡觉,李四是旅游,高淇老师是敲代码,数学教授是做数学题;同样是调用人 “吃饭”的方法,中国人用筷子吃饭,英国人用刀叉吃饭,印度人用手吃饭。
2.多态的要点
(1)多态是方法的多态,不是属性的多态(多态与属性无关)
(2)多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。
(3)父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。
3.示例代码
通过代码来体会多态的好处:如果没有多态,有些地方就需要大量的重写!
里面还有类型转化的一些知识,顺便看了。
public class Animals {public void shout(){System.out.println("叫了一声!");}//用static声明,animalShout()就是类方法,所以可以直接用函数名调用!!!!public static void animalShout(Animals a){ //到了这里相当于将传入的具体的动物类转化为Animals类a.shout();//这里会调用传入的具体的动物类的shout()函数}public static void main(String[] args) {Cat cat=new Cat();cat.catchMouse();animalShout(cat);//Dog dog=(Dog)cat;转换不了Animals a=new Dog();//向上类型转换,自动的Dog dog=(Dog)a;//强制类型转换,向下类型转换dog.guard();//报错,因为此时a已经转为Dog类型了,所以不能转换为Cat//Cat cat1=(Cat)a;//cat1.catchMouse();}
}//多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。
class Dog extends Animals{@Overridepublic void shout() {System.out.println("汪汪汪!");}public void guard(){System.out.println("狗看门!");}
}class Cat extends Animals{@Overridepublic void shout() {System.out.println("喵喵喵");}public void catchMouse(){System.out.println("猫抓老鼠!");}
}class Mouse extends Animals{@Overridepublic void shout() {System.out.println("吱吱吱");}
}
输出:
猫抓老鼠!
喵喵喵
狗看门!
百无聊赖之JavaEE从入门到放弃(九)封装详解 多态详解相关推荐
- 百无聊赖之JavaEE从入门到放弃(二)基础语法
目录 一.注释(单行,多行,文档) 二.标识符_关键字_驼峰原则 三.bug解决:Welcome.java:6: 错误: 编码GBK的不可映射字符 四.常量constant 五.数据类型 1.整型 2 ...
- 百无聊赖之JavaEE从入门到放弃(五)this的本质_对象创建过程的4 步_隐式参数 static
目录 一.this关键字 1.对象创建的过程和this的本质 2.this最常的用法: 二.static关键字 三.变量分类 一.this关键字 1.对象创建的过程和this的本质 构造方法是创建Ja ...
- 百无聊赖之JavaEE从入门到放弃(十二)数组
目录 一.基础知识 1.数组的定义 2.建议 3.注意 4.数组的默认初始化 二.基操示例代码 三.拷贝 四.Arrays类 一.基础知识 1.数组的定义 数组是相同类型数据的有序集合.数组描述的是相 ...
- 百无聊赖之JavaEE从入门到放弃(七)继承
目录 一.继承 1.继承使用要点 二.instanceof关键字 三.方法的重写(override) 四.final关键字 五.组合 定义啥的就不说了,说说要点,跑跑代码. 一.继承 1.继承使用要点 ...
- 百无聊赖之JavaEE从入门到放弃(三)JVM内存机制
一.从属于线程的内存区域 JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程;我们将这部分归为一类. 1.程序计数器(Program Counter Register) 在JVM规 ...
- 百无聊赖之JavaEE从入门到放弃(六)包机制 静态导入
一.包机制 包机制是Java中管理类的重要手段.开发中, 我们会遇到大量同名的类,通过包我们很容易对解决类重名的问题,也可以实现对类的有效管理. 包对于类,相当于文件夹对于文件的作用. 我们通过pac ...
- 百无聊赖之JavaEE从入门到放弃(四)垃圾回收机制(Garbage Collection)
目录 一.垃圾回收原理和算法 1.内存管理 2.垃圾回收过程 3.垃圾回收相关算法 二.通用的分代垃圾回收机制 1.年轻代 2.年老代 3.永久代 4.三种GC 三. JVM调优和Full GC 四. ...
- 百无聊赖之JavaEE从入门到放弃(十)抽象方法_抽象类 接口
目录 一.abstract 1.抽象方法 2.抽象类 3.抽象类的使用要点 4.示例代码 二.接口 1.接口是什么 2.接口的作用 3.区别 4.格式 (1)声明格式: (2)定义接口的详细说明 (3 ...
- 百无聊赖之JavaEE从入门到放弃(十一)string类 常量池原理 内部类
目录 一.String类和常量池 1.String基础知识 2.常量池 二.内部类 1.概念 2.内部类的作用 3.注意 4.非静态内部类 5.静态内部类 6.匿名内部类 7.局部内部类 一.Stri ...
最新文章
- 推特雪花算法 java实现
- 图上的对抗与攻击精选论文列表(​2021相关论文一览)
- 我应该使用i标签代替span吗? [关闭]
- flutter制作具有自定义导航栏的渐进式 Web 应用程序
- 线程同步(互斥锁、条件、读写锁、信号量)
- bmp文件头_图像算法原理与实践——图像文件存储
- RocketMQ概念整理
- Java基础学习总结(131)——项目开发中真的有必要使用Lombok插件么?
- L1-040 最佳情侣身高差-PAT团体程序设计天梯赛GPLT
- php手机下载功能,phpwind手机客户端1.2版主要功能亮点详解
- 使用el-tree-transfer不显示label的坑
- 计算机内存储器和外存储器相比较,计算机中内存储器和外存储器有什么区别
- APN PDP PPP解释
- NVIDIA Jetson之OTA远程升级Jetpack
- 动态规划-背包问题求解过程【代码 from eason】
- phpwind不支持php7,PHP论坛程序PHPWind 7发布 新增四个功能
- 联想E480安装MacOS苹果系统记录
- js控制excel打印完美解决方案(转)
- 输出100-200之间素数,每行8个输出
- Python 3 条件判断和循环语句,list、tuple、dict、set容器,部分函数