面向对象有三大特性:继承,封装,多态

1.继承:

(1)继承的特点:A,java支持单根继承,不支持多根继承

B,java支持多层继承(继承体系)

(2)细节注意:A.子类只能继承父类的非私有成员(成员方法和成员变量)
    B.子类不能继承父类的构造方法,但是我们可以通过super去访问父类的构造

C.千万不要因为部分功能而去使用继承,在Java当中,我们使用继承体系的时候 应该遵循一个"is a"的原则

(3) 继承中成员变量的关系:
a.子类的变量名和父类的变量名不一致时,各自找各自的
b.子类和的变量名和父类的变量名一致时:
1.先在子类局部中去寻找,有就使用
2.先在子类成员中去寻找,有就使用
3.在去父类的成员位置,有就使用,没有就报错

(4)继承中构造方法的关系: 
a.子类中的所有构造方法,都会默认访问父类的无参构造。
b.为什么要访问?
因为子类继承父类会使用到父类的数据,所以子类必须先访问父类的
无参构造,以便将父类的数据进行初始化。

注意:子类的构造默认的第一句代码是super();

如果父类没有提供无参构造,那么会有什么结果?
报错;
如何解决?
a.给父类添加一个无参构造

b.通过super关键字去访问父类的其他构造

2.封装:

在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

封装的优点

  • 1. 良好的封装能够减少耦合。

  • 2. 类内部的结构可以自由修改。

  • 3. 可以对成员变量进行更精确的控制。

  • 4. 隐藏信息,实现细节。


实现Java封装的步骤

1. 修改属性的可见性来限制对属性的访问(一般限制为private),例如:

publicclassPerson{privateStringname; privateintage;}

这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:

publicclassPerson{privateStringname; privateintage;​ publicintgetAge(){returnage; }​ publicStringgetName(){returnname; }​ publicvoidsetAge(intage){this.age = age; }​ publicvoidsetName(Stringname){this.name = name; }}

采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。

3.多态:

同一个对象,在不同时刻体现出来的不同状态。

举例:
猫是猫,猫是动物
多态的前提:
a.要有继承关系
b.要存在方法的重写
其实方法重写不是多态必须的,但是不这样做就没有任何意义
c.要有父类的引用指向子类的对象
Fu fu = new Zi();

用代码的实现下多态:
多态中成员访问的特点:
a.成员变量
编译期,看左边,运行期看左边
b.成员方法
编译期,看左边,运行期看右边
c.构造方法
创建子类对象的时候,先访问父类构造,对父类的数据进行初始化
d.静态方法
编译期,看左边,运行期看左边

除了成员方法,其余全部看左边,因为成员方法存在方法重写,重写会覆盖父类 所以运行看子类就可以了

多态的好处:
a.提高了代码的可维护性(继承来体现)
b.提高的代码的扩展性(由多态来体现)

多态的弊端:
不能使用子类的特有的功能。

解决方法:
a.直接创建子类对象即可(可以,但是 不合适也不合理。而且非常耗内存)
b.把父类引用直接强制转换为子类引用(向下转型)

注:部分笔记来源于其他网站!!!

java面向对象之个人总结的更多相关文章

  1. JAVA面向对象

    JAVA面向对象 对象   我们生活中能看到能摸到的一切事物都是对象.在程序中模拟出生活中的所有东西万物皆对象   只要是对象--属性和行为(方法)   属性   对象有什么   例如:学生有姓名.学 ...

  2. 理解JAVA - 面向对象(object) - 属性,方法

    理解JAVA - 面向对象(object) - 属性,方法 多态的体现:    向上造型,父类接收子类对象:向上造型:    从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...

  3. Java面向对象㈠ -- 封装

    Java的面向对象有三大特征:封装.继承.多态.这里主要对封装进行讲解. 封装可以理解为隐藏一个类的成员变量和成员函数,只对外提供需要提供的成员函数. Java的封装主要通过访问权限控制符:priva ...

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

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

  5. Java面向对象:接口

    Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...

  6. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  7. java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final

    一.前言 一直以来都是拿来主义,向大神学习,从网上找资料,现在就把自己在工作中和学习中的所理解的知识点写出来,好记星不如烂笔头,一来可以作为笔记自己温习,二来也可以给走在求学之路的同学们一点参考意见, ...

  8. 20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》

    20145212 实验二< Java面向对象程序设计> 实验内容 单元测试 三种代码 伪代码 百分制转五分制: 如果成绩小于60,转成"不及格" 如果成绩在60与70之 ...

  9. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  10. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

随机推荐

  1. UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-5: ordin al not in range(128)——解决方案备注

    在vim中使用ycm插件时,偶尔会出现: “UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-5: ord ...

  2. is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

    出现此日志的原因: https://blog.csdn.net/m0_37962779/article/details/78605478 上面的博客中可能解决了他的问题,可我的项目是spring bo ...

  3. Java简单方法批量修改Windows文件夹下的文件名(简单IO使用)

    package test.tttt; import java.io.File; import java.util.ArrayList; import java.util.List; public cl ...

  4. C#的Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。语法如下:

    形参列表=>函数体 函数体多于一条语句的可用大括号括起. 类型 可以将此表达式分配给委托类型,如下所示:   delegate int del(int i); del myDelegate = ...

  5. RDMBorderedButton

    RDMBorderedButton https://github.com/reesemclean/RDMBorderedButton 效果: 源码: RDMBorderedButton.h + RDM ...

  6. swift中变量的几种类型

    swift中变量的几种类型 swift中变量分为 optional,non-optional 以及 implicitly unwrapped optional 这几种类型 var nullablePr ...

  7. Linux mount命令详解

    mount命令用于加载文件系统到指定的加载点.此命令的也常用于挂载cdrom,使我们可以访问cdrom中的数据,因为你将光盘插入cdrom中,Linux并不会自动挂载,必须使用Linux mount命 ...

  8. ASP.NET MVC 4 RC的JS/CSS打包压缩功能

    打包(Bundling)及压缩(Minification)指的是将多个js文件或css文件打包成单一文件并压缩的做法,如此可减少浏览器需下载多个文件案才能完成网页显示的延迟感,同时通过移除JS/CSS ...

  9. int to string & string to int

    #include "stdafx.h" #include <string> #include <sstream> using namespace std; ...

  10. 【原创】修改最大用户进程限制 "ulimit -u"

    centos 6.x 内核版本2.6.32以上,修改/etc/security/limits.d/90-nproc.conf:因为系统是先读/etc/security/limits.conf的值,在用 ...