我们都知道 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. soj1036. Crypto Columns

    1036. Crypto Columns Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description The columnar en ...

  2. 20155331 2016-2017-2 《Java程序设计》第6周学习总结

    20155331 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 输入/输出基础 很多实际的Java应用程序不是基于文本的控制台程序.尽管基于文本的程序作为教 ...

  3. C 语言中指针初始化为字符串常量 不可通过该指针修改其内容

    char b[] = "hello"; 则“hello”存于栈中,因为定义的是一个数组. char *b = "hello"; 则"hello&quo ...

  4. Codeforces Round #540 (Div. 3)题解

    题目链接: https://codeforces.com/contest/1118 A题: 题意: q次查询,给你一个n,要你用1和2来凑出n,1的花费为a,2的花费为b,求花费的最小值. 思路: 我 ...

  5. UNIX环境高级编程 第7章 进程环境

    本章涉及C/C++程序中main函数是如何被调用的.命令行参数如何传递给main函数.程序的内存空间布局.程序如何使用环境变量.程序如何终止退出. main函数 C程序或C++程序总是从main函数开 ...

  6. Python缓存技术,装x新高度。

    一段非常简单代码 普通调用方式 def console1(a, b): print("进入函数") return (a, b) print(console1(3, 'a')) pr ...

  7. ls和cd命令详解

    ls命令 命令功能: ​ 列出当前目录下或者指定目录下的所有文件和目录,ls是list的缩写. 命令语法: ls [选项][目录名 ] #注:[ ]中的内容为非必选项 命令选项: | 选项 | 含义 ...

  8. Centos之目录处理命令

    linux中 关于目录 有几个重要概念 一个是 / 根目录  还有一个当前用户的家目录 比如 root用户的家目录是 /root  普通用户的家目录是/home/xxx 下 root登录 默认家目录 ...

  9. master..xp_fileexist

    declare @sql varchar(800) set @sql='E:\temp.dbf'create table #tb(a bit,b bit,c bit)   insert into #t ...

  10. OutLook中添加Exchange失败问题

    问题: 在邮件中添加账户后,打开outlook时报出错误:无法启动 Microsoft Outlook. 无法打开 Outlook 窗口. 无法打开此文件夹集合. 必须先使用当前的配置文件连接到 Mi ...