面向对象的特征

面向对象的主要特征包括:抽象,继承,封装,多态
1. 抽象:忽略主题中与当前目标无关的方面,值注意与目标有关的方面(抓住主要矛盾或者主要特征),包括数据抽象和过程抽象
2. 继承:用于表述类的共性,是一种联结类的层次模型
3. 封装:将客观事物抽象为类,每个类对自身的方法和数据进行保护。通过权限修饰符确定哪些属性或方法可以被外界访问
4. 多态:允许不同类的对象对同一个消息做出响应

继承的特性以及继承和组合的区别

继承:使用extern实现,使得子类拥有和父类一样方法和变量,主要特性:
1. Java不支持多继承
2. 子类只能继承父类的非私有(public protected)的成员变量和方法
3. 子类成员变量和父类成员变量同名的时候,父类成员变量会被覆盖
4. 子类的成员方法和父类成员方法签名相同(方法名以及参数表相同)的时候,父类的成员方法也是被覆盖

组合是在新类里面创建原有类的对象,重复使用已有类的功能。组合是经常被使用到的,只是很少注意到。
组合和继承的区别:组合通常也被看做是has-a关系而继承被看做是is-a关系

Java中多态实现机制

  1. 方法重载: 重载是指同一个类有多个同名方法,但是方法的参数表不同。由于参数不同,在编译期就可以确定到底是使用哪一个方法,因此属于编译时多态
  2. 方法覆盖:子类覆盖父类方法,也就是同样的方法在子类和父类中是具有不用的逻辑的。基类的引用型可以指向基类对象和子类对象,接口引用型可以指向其实现类变量。程序在编译的时候并不能确定到底是调用哪一个方法,因此只有执行期的时候才可以动态绑定(将方法调用和方法主体联系起来)。由于只有在执行期才能知道到底执行哪个方法,因此方法覆盖实现的多态称为运行时多态

Java中重载和覆盖的区别

重载是在一个类中的多态性,通过在一个类中定义同名方法实现。(子类继承父类方法后也是而已对继承的方法进行重载,但是private 修饰的方法不能被子类重载,因为子类无法继承该类;不能通过返回值或访问权限或异常抛出类型来实现重载)。

覆盖是派生类和基类之间的多态。同样基类中private方法不能被覆盖(无法被继承);子类实现覆盖,必须保证方法名,返回值,参数表,抛出异常类型是一致的。

两者的区别:
1. 覆盖是子类和父类之间,垂直关系;重载是类中方法之间的关系,水平
2. 覆盖需要参数列表是一样的而重载需要时不一样的
3. 覆盖是通过调用者的不同来区别的,而重载是根据调用时的参数不同来区别的

抽象类与接口

抽象类:一个类中包含抽象方法就称为抽象类,通过abstract关键字实现。只要包含了抽象方法的类就必须声明为抽象类,抽象类被实现的时候,访问权限必须相同或者更低(public -> protected -> private),抽象类不能实例化
接口:抽象方法的集合,方法都是没有方法体的,通过interface关键字实现。接口可看做是抽象类的特例,所有方法都是抽象的。

相同点:
1. 都不能被实例化
2. 子类或者实现类都只有在实现了所有的抽象方法之后才可以被实例化

不同点:
1. 接口只有方法定义没有实现,抽象类既可以有方法的定义也可以有方法的实现
2. 一个类可以实现多个接口但是只能继承一个抽象类
3. 接口强调特定功能的实现,是has-a关系,而抽象类强调所属关系,是is-a关系
4. 接口中的变量默认是public static final,且只能有静态final的成员变量,且必须被赋值,方法必须是public abstract。而抽象类就和普通类类似,但是抽象类的抽象方法不能被private, static, synchronized, native等修饰。

抽象类多用于在同类事物中有无法具体描述的方法的时候以及子类和父类存在一定的层次结构的时候使用;而接口多用于不同类之间,所以用于需要支持差别较大的两个或者更多对象之间的特定的交互行为时使用。

补充:
接口可以继承抽象类,抽象类可以实现接口;抽象类可以继承具体类

内部类

定义在一个类的内部的类型称为是内部类,内部类可以看做是一个类的成员(可以被等价看做外部类的一个成员变量)。
分类:
1. 静态内部类:class outer{ static class inner{}}
2. 成员内部类: class outer{ class inner{}}
3. 局部内部类: class outer{ public void func(){class inner{} } }
4. 匿名内部类: class outer{ public void func(new anonymousInner(){ … }); }

静态内部类如同一个类的静态属性一样,不依赖与类的实例而进行实例化。静态内部类不能与外部类名字相同,不能访问外部类的非静态成员,只能访问外部类的静态成员或方法(包括private)。

成员内部类可以自由引用外部类的成员变量和方法;不可以定义静态属性或者方法;只有外部类被实例化了之后成员内部类才可以被实例化。

局部内部类是一个代码块内的类,作用范围也仅仅限于该代码块(类似局部变量);不能被public, protected, private 和static修饰。只能访问方法中的final类型的局部变量。如果局部内部类位于外部类的静态方法或者一个静态代码段中,那么就称为局部静态内部类,如果是普通的方法中或者非静态代码段中就称为是局部内部类。

匿名内部类是没哟名称的内部类,不使用extends class implements。没有构造函数,通过集成其他类或者实现接口(大多使用的是这种,尤其是AndroidUI开发中)。必须跟在new的后面,匿名内部类也属于是局部内部类。

Java中的this和super

Java中this 用来指向当前实例对象,重要的一个功能就是区分成员变量与方法形参(比如当构造方法的形参和成员变量同名的时候就需要this帮忙了)

super可以用来访问父类的方法和成员变量(比如子类的方法或者成员变量覆盖了父类的同名方法和成员变量的时候,如果在子类中需要访问父类中被覆盖掉的同名方法或者成员变量,就需要使用super)

【Java基础】面向对象特性相关推荐

  1. Java 基础 - 面向对象(不错N多教程集合)

    著作权归https://pdai.tech所有. 链接:Java 基础 - 面向对象 | Java 全栈知识体系 本文主要介绍Java OOP 面向对象基础和相关类图.@pdai Java 基础 - ...

  2. 基于Java基础-面向对象实现植物大战僵尸简易版

    基于Java基础-面向对象实现植物大战僵尸简易版 前言 游戏设计 游戏对象 游戏内容 游戏优化 放置植物的优化 移除植物的优化 游戏可玩性的优化 添加游戏背景音乐 后续优化 源码分享 前言 从零开始学 ...

  3. Java基础-面向对象第二特征之继承(Inheritance)

    Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...

  4. (20)Java基础 --面向对象(1)

    目录 面向对象 一.概述 二.生活举例 三.类与对象的关系 四.类的构成 五.类的定义 类的属性 类的方法 创建实例(对象) 内存分配图 六.对象的基本使用 七.局部变量与成员变量的区别 八.面向对象 ...

  5. Java基础-----面向对象

    文章目录 面向对象 类与对象 匿名对象 创建对象的内存分析 栈(stack) 堆(heap) 方法区 PC寄存器 本地方法栈 内部类 成员内部类 局部内部类 匿名内部类 静态内部类 包装类 拆箱和装箱 ...

  6. Java 基础 - 面向对象(不错)

    算法 剑指 Offer 题解 Leetcode 题解 算法 字节跳动内推 操作系统 计算机操作系统 Linux 网络 计算机网络 HTTP Socket 数据库 数据库系统原理 SQL 语法 SQL ...

  7. [F2F] Java基础 (JDK特性/集合/IO/锁)

    简介 Java基础包含:JDK特性,集合, IO, 多线程 / 锁,JVM / JVM调优 等几大类, 单篇幅限制本文主要为 JDK特性,集合, IO,其他为链接到另一篇文章 多线程 / 线程池

  8. Java基础 面向对象的详解

    1.1 万物皆对象 我们是怎么认识世界的? 人类从小就不断的接触到各种各类存在世界上的各种生物,然后通过事物的公共特性,将它们归类,所以以后就不会出现见到猫叫老虎.那么我们在现实生活中,是通过具体的某 ...

  9. 黑马程序员——java基础--面向对象(篇一)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 第一章 1.面向对象     2.成员变量      3.匿名对象     4.封装       ...

  10. 黑马程序员 JAVA基础 -面向对象(四)

    -----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 在此,分享一下自己学习JAVA的学习心得.有不对的地方请帮忙改正,也希望对想学j ...

最新文章

  1. Oracle自增列创建方法
  2. 取供应商客户的期初表
  3. Modebus Slave 与 Modbus Poll主从设备模拟软件与Configure Virtual Serial串口模拟软件使用
  4. 【题解】 P4139 上帝与集合的正确用法
  5. 使用 mock 数据在本地运行 SAP Fiori Elements 应用的工作原理
  6. 工业以太网交换机的接口知识详解
  7. (王道考研计算机网络)第一章计算机网络体系结构-第二节体系结构与参考模型2:ISO/OSI模型
  8. Java Timer、TimerTask
  9. C语言如何制作dIL文件,C语言学习笔记———指针
  10. 学生表,选课表,课程表
  11. npm install报错问题解决以及人人开源前端报错问题解决
  12. 4412 使用小度wifi
  13. linux 的压缩文件格式,常见压缩文件的格式及linux中打包或解压的方法
  14. win系统下设置小鹤双拼
  15. 用python玩转数据测试答案_MOOC_用Python玩转数据_测试答案
  16. 爬虫练习(3)-- 36Kr 站点正则和 ajax 混合
  17. k8s 中部署kafka集群
  18. 【opencv初学者】3、sobel边缘检测
  19. 【JAVA爬虫】爬取猫眼电影TOP100并将数据存入数据库
  20. 分享零基础学习游戏模型的方法

热门文章

  1. android studio 单步调试jni,android studio实现Jni单步调试-标准配置教程
  2. python2和python3分别是python的两个版本_Windows下Python2与Python3两个版本共存的方法详解...
  3. C++知识点32——使用C++标准库(关联容器set和multiset的初始化,赋值,查找,添加,删除与迭代器失效)
  4. OPENCV打开图片进行边缘检测
  5. Iso时间转java instant,在java.util.Date和java.time.Instant之间转换古代日期时的差异
  6. python中rename函数_python os.rename(…)不起作用!
  7. 前端npm 安装包,精选大全集合
  8. python数据库-mysql
  9. 我的Java设计模式-工厂方法模式
  10. phpcurl 请求Chunked-Encoded data 遇到的一个问题