我们都知道 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 中的三大特性的更多相关文章

  1. Java中的三大特性 - 超详细篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的三大特性 - 超详细篇>,希望对大家有帮助,谢谢 这一节的内容可能有点多,大家可以选择性的来看 简介 Java的三大特性:封装.继 ...

  2. java中的三大特性

    java的三大特性是封装.继承.多态: 继承是OOD(面向对象设计)为了更好的建模,编程的时候是OOP(面向对象编程)提高代码的复用性.这里有个注意点:一个类只有一个直接的父类,但不是只有一个父类. ...

  3. Java中面向对象三大特性之——多态

    多态的概述:  多态是继封装.继承之后,面向对象的第三大特性. 生活中,比如跑的动作,小猫.小狗和大象,跑起来是不一样的.再比如飞的动作,昆虫.鸟类和飞机,飞起来也是不一样的.可见,同一行为,通过不同 ...

  4. Java中面向对象三大特性之继承

    1. 继承的概述 继承就是子类继承父类的变量和方法,下面用代码解释一下: class Student {// 定义学生类 String name; int age; void study() { Sy ...

  5. Java中的三大特性:封装、继承、多态

    封装: 概念:封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问,适当的封装可以让代码更容易理解与维护,也加强了代码的安全性. 原则:将属性隐藏起来,若需要访问某个属性,提供公共方法对 ...

  6. Java中面向对象三大特性之——继承

    继承的概述 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可. 现实生活中继承:子承父业,用来描述事物之间的关系 代码中继承:就是用 ...

  7. Java中面向对象三大特性之——封装

    概述 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改. 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问.要访问该类的数据,必须通 ...

  8. 第9章 Java类的三大特性之一:继承

    1.什么是继承 子类继承父类就是对父类的扩展,继承时会自动拥有父类所拥有的处private之外的所有成员作用:增加代码复用语法格式: class 子类名 extends 父类名{…………}第9章 Ja ...

  9. 谈谈Java面向对象的三大特性

    Java面向对象的三大特性就是指封装.继承.多态了. 一.封装: 概念:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (举例:笔记本电脑就是一个封装体,Java语言中最小的封装体就是函数 ...

随机推荐

  1. java.lang.System.arraycopy() 与java.util.Arrays.copyOf()的区别

    java.lang.System.arraycopy() 与java.util.Arrays.copyOf()的区别 一.java.lang.System.arraycopy() 该方法的声明: /* ...

  2. Java开发者应该列入年度计划的5件事

    本文写了我今年计划要做的5件事.为了能跟踪计划执行的进度,就把这些事都列了出来.我觉得这些事对其它Java开发者而言也是不错的参考方向. 1.开发一个应用,通过Java来操作一种NoSQL数据库实现存 ...

  3. linux源码安装 rpm命令

    安装dhcp为例: 挂载光盘文件到/media目录 #mount /dev/sr0 /media 打开/media目录下的Packages目录 #cd /media/Packages 查看系统是否安装 ...

  4. URL访问 和命名规范

    手册:http://v9.help.phpcms.cn/html/2010/structure_0928/71.html http://yourdomain.com/index.php?m=conte ...

  5. 基于Vue + Vuex + Vue-router + Webpack 2.0打造微信界面

    一.项目简介 基于Vue + Vuex + Vue-router + Webpack 2.0打造微信界面,实现了微信聊天.搜索.点赞.通讯录(快速导航).个人中心.模拟对话.朋友圈.设置等功能. 二. ...

  6. 20165227 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    20165227 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:朱越 学号:20165227 指导教师:娄 ...

  7. CSS ... 文本溢出用省略号代替

    { overflow:hidden; text-overflow:ellipsis; white-space:nowrap } text-overflow 属性规定当文本溢出包含元素时发生的事情. c ...

  8. 2018 CCPC网络赛

    2018 CCPC网络赛 Buy and Resell 题目描述:有一种物品,在\(n\)个地点的价格为\(a_i\),现在一次经过这\(n\)个地点,在每个地点可以买一个这样的物品,也可以卖出一个物 ...

  9. APUE-文件和目录(八)文件时间

    文件的时间 与文件相关的三个时间值: 访问时间:最后一次访问文件的时间.例如,cat命令会修改这个时间. 修改时间:文件内容最后一次被修改的时间. 状态更改时间:文件的i节点最后一次被修改的时间.例如 ...

  10. 利用CSS函数calc(...)实现Web页面左右布局

    前言 因为自己的网站需要,想要做一个左右布局的页面: 左边是导航菜单之类的东西.右边是文档内容(因为最近看的一些软件的文档页面都是这么布局的): 左边固定宽度——300像素.右边使用剩余的宽度: 左边 ...