转载,原文来自http://blog.sina.com.cn/s/blog_5f79a56a0100c6ig.html

众所周知,java中的面向对象的三大基本特征是:【封装】、【继承】、【多态】

一、封装

        对象要有一个明确的边界;边界的划分(对象各司其职、对象的粒度、对象的可重用性)

        具体来说:

                1.属性: 私有 private(提供set和get方法)

                2.方法: 公开或私有public/private

                3.方法声明 --> 公开

                  方法实现 --> 隐藏

                 实现改变时,对对象的使用者没有影响。

 

二、继承

              共性放到父类,特性放到子类;子类,父类 --> 其实就是特殊 --> 一般

        1.关键字: extends  例如:Dog extends Animal{}

        2.java中一个类最多只能有一个直接的父类,即单继承(具有简单性、树形结构),

          C++中是单继承

          java中要实现多继承,通过接口来实现。

        3.父类中所有属性和方法都能继承给子类;父类中的私有方法不能继承给子类。

        4.java中的访问修饰符

访问修饰符

访问权限

 继承 

private       

本类内部

不能继承

default       

本类+同包

同包子类可以继承

protected     

本类+同包+不同子包

可以继承

public        

公开

可以继承

5.构造对象过程

                   (1)分配空间

                   (2)递归地构造父类对象

                                a. 父类 初始化属性

                                b. 父类 构造方法

                   (3)初始化属性

                   (4)调用构造方法



        6.super  

               用法:

                   super()  调用父类的构造方法,只能出现在构造方法的第一行

                   super.方法名   super表示父类的对象,通过它去调用父类的方法

               注意:在写类的时候,一定要写默认无参的构造方法,如果一个构造方法的

                     第一句既不是this(),也不是super()时,那么就会在这里隐含的调用

                     他的父类的无参的构造方法,即隐含的有super()。



三、多态

            运行时多态。

            子类的对象放在父类的引用中,例如 Animal a=new Dog,子类对象当父类对象来使用。

        1.多态原则:

                  (1)对象类型不变

                  (2)只能用引用调用其引用类型中定义的方法

                  (3)运行时,根据对象的实际类型去找子类覆盖之后的方法

             例子:

                  有Animal类中有eat()和sleep()两个方法,sleep()中睡8小时;子类Dog中有

                  eat()方法,sleep()方法中睡6小时,还有wangwang()方法。

                  现创建Animal a=new Dog(); 不能调用a.wangwang(),调用a.sleep()输出睡6小时。



          2.对象的强制转换

                 格式: 引用 instanceof 类型

                        引用所指的对象是否与类相符,返回值boolean值。

                 用法:

                       Animal a=new Cat();

                       if(a instanceof Dog)

                       {

                          Dog d=(Dog)a;

                          d.wangwang();

                        }

                 说明:如果只有Dog d=(Dog)a;运行时错误,因为a是Cat而不是Dog (多态原则第一条)



          3.多态的灵活变换

                  (1)用于参数列表上:

                               public void m(A a){} 可以用A类的任何子类对象作为参数

                  (2)用在返回值上:

                              public A m(){}  这个方法可能返回A类的任何子类对象

java中的面向对象的三大基本特征的更多相关文章

  1. 【java基础】面向对象的三大基本特征之-------继承

    面向对象的三大特征:封装,继承,多态 java通过extends关键字来实现继承,而且是单继承,一个子类只可以有一个直接父类,但是父类还可以有父类... java.long.Object是所有类的父类 ...

  2. Java中的面向对象

    Java中的面向对象 在软件开发的学习中, 我最先接触的开发语言就是java,但都是简单的函数和循环数组的应用.说道面向对象,第一次看到这个词的时候还是在C#的学习过程中,我记得当时PPT上霸气的解释 ...

  3. Java学习:面向对象的三大特征:封装性、继承性、多态性之继承性

    面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...

  4. Java中的面向对象I

    一.首先来了解一下Java面向对象的五个程序设计方式: 1.万物皆对象 Java以类为基本模块来将问题抽象化,在计算机中解决实际生活中的问题 2.程序为对象的集合,程序中的类通过互发消息来告知彼此要做 ...

  5. 深入分析Java中的I/O类的特征及适用场合

    Java中有40多个与输入输出有关的类.假设不理清它们之间的关系.就不能灵活地运用它们. 假设从流的流向来分,可分为输入流和输出流,而输入流和输出流又都可分为字节流和字符流.因而可将Java中的I/O ...

  6. 【java基础】面向对象的三大特征---多态

    java的引用变量有两种类型,编译时类型和运行时类型,如果编译时类型和运行时类型不一致,就会出现多态. 多态分为: 运行时多态 java运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称 ...

  7. C#面向对象的三大基本特征

    封装: 封装是指将数据与具体操作的实现代码放在某个对象内部,使这些代码的实现细节不被外界发现(可以使代码更加安全),外界只能通过接口使用该对象,而不能通过任何形式修改对象内部实现,正是由于封装机制,程 ...

  8. JAVA中常说的三大框架指:SSH

    即:spring.Struts.hibernate Spring:功能强大的组件粘合济,能够将你的所有的Java功能模块用配置文件的方式组合起来(还让你感觉不到spring的存在)成为一个完成的应用 ...

  9. Java中的面向对象II

    既然要创建一个对象那么就需要有一个类,下面介绍类的构建. 一.类的两个元素: 1.字段 字段也就是类变量,每一个类变量都是类的成员. <1.>类变量访问指定通常是私有的(private)或 ...

随机推荐

  1. JavaScript 获取输入时的光标位置及场景问题

    前言 在输入编辑的业务场景中,可能会需要在光标当前的位置或附近显示提示选项.比如社交评论中的@user功能,要确保提示的用户列表总是出现在@字符右下方,又或者是在自定义编辑器中 autocomplet ...

  2. linux下图形字符的命令

    banner sudo apt-get install sysvbanner banner song 若更改字体可以使用banner song printerbanner -w 50 A toilet ...

  3. 代码题(45)— 下一个排列、第k个排列

    1.31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只 ...

  4. 《Advanced Bash-scripting Guide》学习(十):利用whois查询域名信息

    本文所选的例子来自于<Advanced Bash-scripting Gudie>一书,译者 杨春敏 黄毅 Example 4-6. wh,whois域名查询 #!/bin/bash #做 ...

  5. hdu 5239 Doom(线段树)

    Doom Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Sub ...

  6. C++中内部类访问外部类的私有成员

    首先,如果不知道什么是内部类InnerClass的话,就没必要往下看了. 尝试在C++中模仿apple objective-c 的Grand Dispatch简化多线程编程时,使用了boost::fu ...

  7. 32 python 并发编程之协程

    一 引子 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去 ...

  8. 【转】JVM可视化工具插件---Visual GC

    Visual GC是一个Java 内存使用分析与GC收集的可视化工具插件 <插件下载> 一:整个区域分为三部分:spaces.graphs.histogram 1 spaces区域:代表虚 ...

  9. git之cherry-pick

    当想把当前分支提交的代码,也在其他分支提交,那可以用cherry-pick命令. 1 假设在master分支commit的id为:abc12345; 2 切换到其他分支,如develop分支; 3 在 ...

  10. 应用层-day02

    web与HTTP web的应用层协议时超文本传输协议(HyperText Transfer Protocol HTTP) HTTP是由两个程序实现的:一个客户端程序和一个服务器程序. HTTP定义了w ...