Java 中的三大特性
我们都知道 Java 中有三大特性,那就是继承 ,封装和多态 。那我今天我就来说说这几个特性 。
老样子 ,先问问自己为什么会存在这些特性 。首先说封装 ,封装就是使用权限修饰符来实现对属性的隐藏 ,同时提供一些共有的 get / set 方法来对数据进行访问 。这样怎么实现封装的效果的呢 ?我们可以在 get 或 set 方法内部添加一些逻辑控制语句 。比方说在设置年龄的时候 ,我就限制传入的 age 不能大于 120 。代码实现可以这样写 。
public void setAge(int age){
if(age > 120){
this.age = 120;
}
}
public int getAge(){
if(this.gender == "女"){
System.out.println("女孩子的年龄是你能看的?");
return -1;
}
return this.age;
}
这只是一个简单的实例 ,实际情况是可以优化的 。比方说对小于零的 age 进行限制 。所以我们可以看到对数据的封装有以下优点 ,对成员进行精密的控制且隐藏了实现细节 ,还可以自由的修改方法的内部实现 。
就像是儿子继承老子的财富那样 ,子类也可以继承父类的属性和方法 ,但是有些是不能继承的 ,这要回到前面看一看访问修饰符的问题了 。在 Java 中只允许单继承 ,就是只能有一个老子 。继承是怎么实现的 ?为什么要有继承 ?我们通过 extends 关键字来标识继承的父类 。而且继承是可以传递的 ,A 继承 B ,B 继承 C ,那么 C 也是 A 的父类 。父类也叫超类 ,子类也叫基类 。Object 是所有类的超类 。在子类中调用和父类同名的方法时 ,执行的是子类的方法 ,而可以显示的使用 super 来调用父类的方法 。
继承的优点显而易见 ,可以增加代码的复用性 ,但是我们不能为了继承而去继承 ,还要注意继承和组合的概念 ,继承是 “ is a ” 的概念 ,比方说 cat is a animal . 而组合是 “ has a ” 的概念 ,比方说 our body has a leg . 以上两句话可以设计出如下的结构 。
class Animal {
sleep(){
System.print.out("动物睡觉");
}
}
// 表示猫是动物
class Cat extends Animal{
sleep(){
System.print.out("猫睡觉");
}
}
class Leg{
}
// 表示身体里有腿
class Body{
Leg leg = new Leg();
}
而最后一个就是多态 ,同样的问自己 ,什么是多态 ?多态有什么用 ?顾名思义 ,多态就是多种状态 。就像是同样的早晨有时候你是精神满满而有时候你是萎靡不振一样 ,我们在调用同一个方法的时候 ,很可能执行的情况也不一样 。这就是 Java 中说的多态 。那为什么会不一样呢 ?还记得刚刚说的子类继承父类的方法吧 ,子类在继承父类方法之后 ,可以对其进行重写 ,当我们调用重写的方法时 ,运行的结果就和父类的结果不一样 。所以说 ,你想要多态 ,先要有继承 。还有一种多态的形式 ,我们称之为 “ 虚拟方法调用 ” 又叫向上转型 ,说的简单一点就是父类的引用指向了子类对象 。像这样 ,父类 Animal 的 a 指向了 Cat 实体 。
Animal a = new Cat();
a.sleep() // 猫睡觉
需要注意的是在使用虚拟方法调用的时候不能调用父类独有的方法 ,这会在运行时报错 ,在编译时没事 ,编译的时候只编译等号左边 。但是在运行的会看具体的对象 ,在子类中找不到相应的方法自然会报错 。
可以总结一下多态的作用了 ,我们使用多态可以达到解耦合和易扩展的目的 ,我们编写不同模块的功能 ,在调用的时候只需要将父类的引用变个方向就行 。只需提供稳定的子类实现 ,父类只负责调用相应的接口方法就行 。这也就是工厂设计模式的原理 。
Java 中的三大特性的更多相关文章
- Java中的三大特性 - 超详细篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的三大特性 - 超详细篇>,希望对大家有帮助,谢谢 这一节的内容可能有点多,大家可以选择性的来看 简介 Java的三大特性:封装.继 ...
- java中的三大特性
java的三大特性是封装.继承.多态: 继承是OOD(面向对象设计)为了更好的建模,编程的时候是OOP(面向对象编程)提高代码的复用性.这里有个注意点:一个类只有一个直接的父类,但不是只有一个父类. ...
- Java中面向对象三大特性之——多态
多态的概述: 多态是继封装.继承之后,面向对象的第三大特性. 生活中,比如跑的动作,小猫.小狗和大象,跑起来是不一样的.再比如飞的动作,昆虫.鸟类和飞机,飞起来也是不一样的.可见,同一行为,通过不同 ...
- Java中面向对象三大特性之继承
1. 继承的概述 继承就是子类继承父类的变量和方法,下面用代码解释一下: class Student {// 定义学生类 String name; int age; void study() { Sy ...
- Java中的三大特性:封装、继承、多态
封装: 概念:封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问,适当的封装可以让代码更容易理解与维护,也加强了代码的安全性. 原则:将属性隐藏起来,若需要访问某个属性,提供公共方法对 ...
- Java中面向对象三大特性之——继承
继承的概述 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可. 现实生活中继承:子承父业,用来描述事物之间的关系 代码中继承:就是用 ...
- Java中面向对象三大特性之——封装
概述 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改. 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问.要访问该类的数据,必须通 ...
- 第9章 Java类的三大特性之一:继承
1.什么是继承 子类继承父类就是对父类的扩展,继承时会自动拥有父类所拥有的处private之外的所有成员作用:增加代码复用语法格式: class 子类名 extends 父类名{…………}第9章 Ja ...
- 谈谈Java面向对象的三大特性
Java面向对象的三大特性就是指封装.继承.多态了. 一.封装: 概念:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (举例:笔记本电脑就是一个封装体,Java语言中最小的封装体就是函数 ...
随机推荐
- soj2013.Pay Back
2013. Pay Back Constraints Time Limit: 1 secs, Memory Limit: 256 MB Description "Never a borrow ...
- python初步学习-Python模块之 re
re 正则表达式 python正则表达式在线检验网站 python re正则表达式语法 匹配字符 语法 解释 表达式 匹配实例 . 匹配任意除"\n"以外的任何字符 a.c abc ...
- 表单验证插件-validator.js 使用教程
做网站的时候,常常会涉及到各种表单验证.选择一款好用的表单验证插件,会降低表单验证开发的难度.在开发中,我目前使用的表单验证插件是:validator.js. validator.js 是一款轻量的表 ...
- Java编程思想 4th 第3章 操作符
有了数据,还需要进行数据间的运算,因此Java中也有数据间运算的各种符号,书本称之为操作符,正确的翻译应该是运算符. Java中的运算符同C++相同,运算符同运算符对象构成表达式,表达式是运算对象及运 ...
- nodejs学习:net模块
官方API文档地址:https://nodejs.org/api/net.html 创建一个server.js var net = require('net'); var PORT = 8099; v ...
- 88.modelsim仿真do文件相关技巧
网上的关于DO文件的编写好像资料不多,比较杂,所以本人总结一下常用的简单语法,方便大家查看.其实本人也刚接触DO文件没多久,有纰漏很正常,欢迎指正批评,互相学习.PS:写得有点乱 还有一个值得注意 ...
- redis数据淘汰机制
volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用 的数据淘汰 volatile-ttl:从已设置过期时间的数据集(server.db[i ...
- 十五、springboot集成定时任务(Scheduling Tasks)(二)之(线程配置)
配置类: /** * 定时任务线程配置 * */ @Configuration public class SchedulerConfig implements SchedulingConfigurer ...
- [HBase] 服务端RPC机制及代码梳理
基于版本:CDH5.4.2 上述版本较老,但是目前生产上是使用这个版本,所以以此为例. 1. 概要 说明: 客户端API发送的请求将会被RPCServer的Listener线程监听到. Listene ...
- js点击页面其他地方如何隐藏div元素菜单
web页面常用的一个需求,写下拉菜单是我们往往不是用select_option,而是自定义一个元素列出选项来满足需求,当我们点击按钮出现菜单, 点击按钮或菜单以外页面空白地方隐藏该菜单,这里提供一种简 ...