目录

一.封装

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从入门到放弃(九)封装详解 多态详解相关推荐

  1. 百无聊赖之JavaEE从入门到放弃(二)基础语法

    目录 一.注释(单行,多行,文档) 二.标识符_关键字_驼峰原则 三.bug解决:Welcome.java:6: 错误: 编码GBK的不可映射字符 四.常量constant 五.数据类型 1.整型 2 ...

  2. 百无聊赖之JavaEE从入门到放弃(五)this的本质_对象创建过程的4 步_隐式参数 static

    目录 一.this关键字 1.对象创建的过程和this的本质 2.this最常的用法: 二.static关键字 三.变量分类 一.this关键字 1.对象创建的过程和this的本质 构造方法是创建Ja ...

  3. 百无聊赖之JavaEE从入门到放弃(十二)数组

    目录 一.基础知识 1.数组的定义 2.建议 3.注意 4.数组的默认初始化 二.基操示例代码 三.拷贝 四.Arrays类 一.基础知识 1.数组的定义 数组是相同类型数据的有序集合.数组描述的是相 ...

  4. 百无聊赖之JavaEE从入门到放弃(七)继承

    目录 一.继承 1.继承使用要点 二.instanceof关键字 三.方法的重写(override) 四.final关键字 五.组合 定义啥的就不说了,说说要点,跑跑代码. 一.继承 1.继承使用要点 ...

  5. 百无聊赖之JavaEE从入门到放弃(三)JVM内存机制

    一.从属于线程的内存区域 JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程;我们将这部分归为一类. 1.程序计数器(Program Counter Register) 在JVM规 ...

  6. 百无聊赖之JavaEE从入门到放弃(六)包机制 静态导入

    一.包机制 包机制是Java中管理类的重要手段.开发中, 我们会遇到大量同名的类,通过包我们很容易对解决类重名的问题,也可以实现对类的有效管理. 包对于类,相当于文件夹对于文件的作用. 我们通过pac ...

  7. 百无聊赖之JavaEE从入门到放弃(四)垃圾回收机制(Garbage Collection)

    目录 一.垃圾回收原理和算法 1.内存管理 2.垃圾回收过程 3.垃圾回收相关算法 二.通用的分代垃圾回收机制 1.年轻代 2.年老代 3.永久代 4.三种GC 三. JVM调优和Full GC 四. ...

  8. 百无聊赖之JavaEE从入门到放弃(十)抽象方法_抽象类 接口

    目录 一.abstract 1.抽象方法 2.抽象类 3.抽象类的使用要点 4.示例代码 二.接口 1.接口是什么 2.接口的作用 3.区别 4.格式 (1)声明格式: (2)定义接口的详细说明 (3 ...

  9. 百无聊赖之JavaEE从入门到放弃(十一)string类 常量池原理 内部类

    目录 一.String类和常量池 1.String基础知识 2.常量池 二.内部类 1.概念 2.内部类的作用 3.注意 4.非静态内部类 5.静态内部类 6.匿名内部类 7.局部内部类 一.Stri ...

最新文章

  1. 推特雪花算法 java实现
  2. 图上的对抗与攻击精选论文列表(​2021相关论文一览)
  3. 我应该使用i标签代替span吗? [关闭]
  4. flutter制作具有自定义导航栏的渐进式 Web 应用程序
  5. 线程同步(互斥锁、条件、读写锁、信号量)
  6. bmp文件头_图像算法原理与实践——图像文件存储
  7. RocketMQ概念整理
  8. Java基础学习总结(131)——项目开发中真的有必要使用Lombok插件么?
  9. L1-040 最佳情侣身高差-PAT团体程序设计天梯赛GPLT
  10. php手机下载功能,phpwind手机客户端1.2版主要功能亮点详解
  11. 使用el-tree-transfer不显示label的坑
  12. 计算机内存储器和外存储器相比较,计算机中内存储器和外存储器有什么区别
  13. APN PDP PPP解释
  14. NVIDIA Jetson之OTA远程升级Jetpack
  15. 动态规划-背包问题求解过程【代码 from eason】
  16. phpwind不支持php7,PHP论坛程序PHPWind 7发布 新增四个功能
  17. 联想E480安装MacOS苹果系统记录
  18. js控制excel打印完美解决方案(转)
  19. 输出100-200之间素数,每行8个输出
  20. Python 3 条件判断和循环语句,list、tuple、dict、set容器,部分函数

热门文章

  1. 【小程序】小游戏到底是个啥?
  2. 问题 A: 零基础学C/C++24——判断奇偶数
  3. word中插入矢量图的方法
  4. Websocket实现利用手机触屏用作电脑手柄(for 崩坏3)
  5. Android 多线程AsyncTask详解
  6. 6款支持中文开源OCR软件的简单使用
  7. 【数据处理】表格合并与去重
  8. linux彻底卸载某一个软件
  9. CF1657D:D. For Gamers. By Gamers.(dp,调和级数,二分)
  10. 腾讯视频下载后为什么还需联网看_腾讯视频如何下载离线视频