转载,原文来自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. 转:autofac在mvc和webapi集成的做法

    本文转自:http://www.cnblogs.com/Hai--D/p/5992573.html var builder = new ContainerBuilder(); // Mvc Regis ...

  2. poj2114树分治

    题意:给你一棵树,每条边有权值,求有没有一条链使得权值和为k 题解:和上一题类似,依旧是树分治,只是我们储存结果的时候是判断加起来为k的点对数,刚开始本来想用map存答案,结果就t了,后来用了vect ...

  3. WPF/WP/Silverlight/Metro App代码创建动画的思路

    在2010年之前,我都是用Blend创建动画,添加触发器实现自动动画,后来写成代码创建的方式.如今Blend已经集成到Visual Studio安装镜像中了,最新的VS2015安装,Blend的操作界 ...

  4. hzau 1205 Sequence Number(二分)

    G. Sequence Number In Linear algebra, we have learned the definition of inversion number: Assuming A ...

  5. 25 python socket网络编程

    一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...

  6. mysql_异常_01_Access denied for user 'root'@'192.168.1.13' (using password: YES)

    一.异常现象 使用navicat premuim 连接 虚拟机mysql数据库时 ,抛出如下错误: Access denied for user 'root'@'192.168.1.13' (usin ...

  7. lamp script

    centos6 ,不区分32位,64位, 要求机器可以上外网. 支持lamp 和 lnmp, mysql支持5.1和5.6两个版本,php支持5.3和5.6两个版本,apache2.2,nginx1. ...

  8. 20165210 Java第九周学习总结

    20165210 Java第九周学习总结 教材学习内容 - 第十三章学习总结 URL类: URL的构造方法: try { URL url = new URL("http://www.goog ...

  9. 骨骼动画 cocos2d-x + cocoStudio <cocos2d-x : version 2.2.0>

    cocos2d-x version 2.2.0 首先,在 HelloWorldScene.cpp 中的 init()函数中 添加如下代码 (资源文件可以直接到 cocos2d-x 中获取) #incl ...

  10. bzoj 3681 Arietta

    一棵有根树,每个点有一个音高,有 $m$ 中弹奏方法,每种方法可以弹奏 $d$ 子树中音高在 $[l,r]$ 间的音符,每种方法最多弹 $t$ 次 求最多能弹出多少个音符 $n \leq 10000$ ...