1.类和对象


  • 类是对现实生活中一类具有共同属性和行为的事务的抽象;类是对象的数据类型,类是具有相同属性和行为的一组对象的集合。简单理解:类就是对现实事务的一种描述。

类的组成:
属性:指事物的特征
行为:指事物能执行的操作

  • 类和对象的关系
    类:类是对现实生活中一类具有共同属性和行为的事物的抽象
    对象:是能够看得到摸得着的真实存在的实体
    简单理解:类是对事物的一种描述,对象则为具体存在的事物

类的定义

  • 类的组成是由属性和行为两部分组成
    属性:在类中通过成员变量来体现(类中方法外的变量)
    行为:在类中通过成员方法来体现
public class Phone {//成员变量String brand;int price;//成员方法public void call() {System.out.println("打电话");}public void sendMessage() {System.out.println("发短信");}
}

单个对象内存图

  • 成员变量使用过程

  • 成员方法调用过程

    多个对象内存图

  • 成员变量使用过程

  • 成员方法调用过程

多个对象指向相同内存图

  • 总结
    当多个对象的引用指向同一个内存空间(变量所记录的地址值是一样的)只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据

成员变量和局部变量

  • 类中位置不同:成员变量(类中方法外)局部变量(方法内部或方法声明上)
  • 内存中位置不同:成员变量(堆内存)局部变量(栈内存)
  • 生命周期不同:成员变量(随着对象的存在而存在,随着对象的消失而消失)局部变量(随着方法的调用而存在,随着方法的调用完毕而消失)
  • 初始化值不同:成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用)

面向对象的三大特征

封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念。

  • 封装原则
    将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
    成员变量private,提供对应的getXxx()/setXxx()方法
  • 封装好处
    通过方法来控制成员变量的操作,提高了代码的安全性
    把代码用方法进行封装,提高了代码的复用性

继承:继承是一种联结类的层次模型,并且允许和鼓励重用,它提供了一种明确表达共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。子类继承了原始类的特性,子类可以从它的父类那里继承方法和实例变量,并且可以修改或增加新的方法使之更适合特殊的要求。

  • 继承的特点
    子类自动拥有父类的非私有的成员
    子类还可以有自己特有的成员
    Java中只支持单继承,允许多层继承

  • 继承的好处和弊端
    好处:
    提高了代码的复用性
    提供了代码的维护性
    弊端:
    类与类之间的耦合性增强了

  • 继承中成员方法的访问特点
    问题:如果子类没有这个方法,使用的是父类的还是子类的?
    子类没有找父类,父类没有就报错

    问题:继承中如果出现了重名的成员方法,调用的时候. 执行的是父类的还是子类的?
    子类的 有一个重要的概念,方法的重写

  • 面试题:Overload和Override之间的区别

         * A:Overload(重载): 同一个类中,方法名相同 参数列表不同 与返回值无关参数列表不同:* 个数不同* 与之对应的数据类型不同* B:Override(覆盖重写):必须是在继承/实现的关系,才有方法的重写方法的重写: 与父类中的方法的声明是一模一样的
    
  • final
    1.什么是final
    【修饰 类 方法 变量】 final 表示最终的一个意思
    2.特点
    final修饰的类: 表示最终的类 , 没有子类 这个类就是太监类,但是太监类也有是父亲的
    final修饰的成员方法: 表示这个方法是最终的,不能被子类重写
    final修饰的成员变量: 不在是变量,而是常量

    给常量赋值有两种方式:
    * 直接赋值(推荐)
    public final int AGE = 10;
    * 构造方法赋值(了解)

    • 自定义常量的格式:
      * 普通的常量
      修饰符 final 数据类型 常量名 = 值;
      * 静态的常量
      修饰符 static final 数据类型 常量名 = 值;

      final修饰引用数据类型,修饰的是地址值,而不是里面的元素
      final修饰基本数据类型,修饰的是值,这个值不能改变

  • static关键字

    • static可以修饰什么
      * 可以修饰成员变量
      * 可以修饰成员方法
    • static修饰的特点
      * 被static所修饰的成员是共享数据,而不在是属于 某一个对象了! 这个数据属于类的

多态:多态是指允许不同类的对象对同一消息做出响应。多态包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

  • 多态的前提?

    继承/接口实现的关系
    要有方法的重写
    父类的引用指向了子类的对象

  • 多态的格式:
    * 普通类的多态
    父类 对象名= new 子类对象();
    * 抽象类的多态
    * 接口的多态

  • 多态中成员变量和成员方法的使用特点

    总结:
    * 成员变量的使用特点
    编译看左边 运行看左边
    * 成员方法的使用特点
    编译看左边 运行看右边
    * 静态的成员:
    编译看左边 运行看左边

  • 使用多态有什么好处和弊端

    好处:提高了代码的扩展性
    弊端:使用不了子类特有的成员

  • 多态的转型

    多态的向上转型(基本数据类型隐式转换)
    将子类的对象提升为了父类的类型

    多态的向下转型(基本数据类型强制转换)
    将父类的对象强转为子类的类型

          * 什么情况下需要用到向下转型?子类特有的行为的,前提有多态的向上转型* 向下转型的格式目标数据类型 对象名 = (目标数据类型)父类的变量名;
    

抽象类

  1. 什么是抽象类?
    抽象方法所在的类必定是一个抽象类
  2. 什么是抽象方法?
    在多个类中,方法的声明是一样的,但是具体的功能是不一样的
    我们只抽取方法的声明,没有方法体的方法,就是抽象方法
  • 抽象方法定义格式

    public abstract 返回值 方法名(参数列表);

  • 抽象类定义格式

    public abstract class 类名{}

  • 抽象类的成员特点
    总结:

    * 成员变量* 成员变量 * 常量
    * 构造方法* 可以有构造方法为了给子类进行初始化数据使用的
    *成员方法* 可以有非抽象方法(提高了代码的复用性)* 有抽象方法
    

    总结:
    普通类中有什么,抽象类中就写什么,只不过比普通类多了一个关键字 abstract

    • 抽象的思想:
      为了强制子类重写父类的抽象方法而来的
      强制的思想

接口

  • 什么是接口

    总结:
    接口就是一种公共规范标准
    标准要对外暴露出来
    接口就是对行为进行规范

  • 接口的基本定义格式

    格式:
    public interface 接口名{}

      使用接口的格式:public class 实现类 implements 接口{重写接口中所有的抽象方法}
    

    注意事项:
    一个类实现一个接口,必须要重写接口中所有的抽方法
    要么这个类是一个抽象类

      案例代码:public class Test {public static void main(String[] args) {// 多态的形式创建对象Inter i = new InterImpl();i.method();InterImpl impl = new InterImpl();impl.method();}}public interface Inter {public abstract void method();}public class InterImpl implements Inter {@Overridepublic void method() {System.out.println("接口中的method方法");}}
  • 接口的成员特点

    • 成员变量
      常量,在接口中定义的变量就是一个常量,默认有public static final 来修饰的
      写不写都有这三个修饰符.而且还可以选择性的去写

    • 构造方法
      没有构造方法的

    • 成员方法
      全都是抽象方法,默认有 public abstract 修饰.
      写不写都有这两个修饰符.而且还可以选择性的去写

  • 类和接口的关系

    • 类与类的关系
      继承的关系 单继承 但是多层继承

    • 类与接口的关系
      实现的关系 多实现

    • 接口与接口的关系
      继承的关系 多继承

    • 类与抽象类的关系
      继承的关系 单继承 但是多层继承

    • 抽象类与抽类的关系
      继承的关系 单继承 但是多层继承

    • 抽象类与接口的关系
      实现的关系

  • 抽象类和接口的区别

    总结:

    • 成员区别

      • 抽象类
        可以有成员变量 还可以有常量
        成员方法(抽象的和非抽象的)

      • 接口
        常量
        抽象方法

    • 关系区别

      • 类与类
        继承的关系 单继承 但是多层继承

      • 类与接口
        实现的关系 多实现

      • 接口与接口
        继承的关系 多继承

    • 设计理念区别

      • 抽象类
        对类抽象,包括属性、行为
      • 接口
        对行为抽象,主要是行为

#Java学习总结面向对象+抽象+接口相关推荐

  1. day8 Java学习(面向对象.多态接口)

    面向对象    多态: 概述:事物存在的多种形态.  多态前提: *要有继承关系 *要有方法重写 *要有父类引用指向子类对象. 成员变量访问:           编译看左边(父类),运行左边(父类) ...

  2. Java学习笔记_抽象/接口

    抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束 抽象类:抽象方法所在的类,必须是抽象类.在class前面写上abstract 如何使用抽象类和抽象方法 不能直接创建new抽象类 ...

  3. java饲养员喂动物_做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处...

    做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处 interface Animal{ //动物的接口    public void eat(Food food); // ...

  4. 深圳Java学习:面向对象【重点知识】

    深圳Java学习:面向对象[重点知识] 在Java的学习中,面向对象应该是Java技术的重中之重,虽然在生活中没有对象可以面对,但在技术中还是要一直接触面对对象,而且不可避免.今天千锋小编对面向对象来 ...

  5. JAVA学习笔记 15 - 函数式接口、Lambda表达式和方法引用

    本文是Java基础课程的第十五课.主要介绍在JDK8中,Java引入的部分新特性,包括函数式接口.Lambda表达式和方法引用.这些新特性使得Java能够在按照面向对象思想进行开发的基础上,融合函数式 ...

  6. Java 学习(12)--接口

    一.接口 (1)猫钻火圈,狗跳高等功能,不是动物本身就具备的,是在后面的培养中训练出来的, 这种额外的功能, java 提供了接口表示. (2)接口的特点: A:接口用关键字 interface 修饰 ...

  7. Java学习笔记——面向对象

    声明:文章首发于我的个人微信公众号Java编程社区,查看更多文章与学习资源请移步我的公众号Java编程社区 万物皆对象 学习Java,我们都听过这句话:万物皆对象.那么什么是对象? 我们先来看看人类是 ...

  8. Java学习笔记——面向对象 1

    声明:本文首发于我的个人微信公众号[Java编程社区],查看更多文章与学习资源请移步我的公众号Java编程社区 万物皆对象 学习Java,我们都听过这句话:万物皆对象.那么什么是对象? 我们先来看看人 ...

  9. java学习之面向对象和封装

    面向过程:当需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节. 面向对象:当需要实现一个功能的时候,不关系具体的步骤,而是找一个已经具有该功能的人帮忙做事情. 面向过程强调步骤 ...

最新文章

  1. 基于相关系数的影像匹配_智库丨陈晓勇:低空摄影测量立体影像匹配的现状与展望...
  2. vonic 安装的坑
  3. Linux下安装Oracle遇到的错误
  4. MD5单向,加密算法-java
  5. 依赖注入_set方法注入_构造器注入
  6. 成功驱动5150用HT68F30
  7. neo4j browser执行脚本后不提示用时_还不懂什么是分层自动化测试的,有赞的实践经历告诉你...
  8. Python学习笔记——输入与输出用法
  9. 获取登录域帐号信息方式之 —-IIS(VB)
  10. 实现一个shared_ptr
  11. PDF加密以及去除密码小妙招
  12. Windows系统优化软件 | 这10款功能超级强大!界面优美!值得收藏
  13. py的征途2之简例分享
  14. 编程猫平台 python-编程猫发布高中新课标产品 助力中小学python教育
  15. 对CS1.6游戏的分析及心得
  16. 计算机word铁路试题,计算机word试题含答案
  17. ToxinPred – 多肽毒性预测、突变设计和理化性质预测
  18. js高级程序设计(一) —— js简介
  19. mysql报错3009_MySQL修改密码方法汇总
  20. 想要摆脱CURD,写作是一个出路?(文末送5本书籍)

热门文章

  1. 微信会员卡管理系统怎么开通?
  2. 客户体验:客户对企业产生的所有交互与感知!
  3. React Native 开发iOS真机调试
  4. 爬虫基础-bs4数据解析样例
  5. php文件断点续传,php超大文件及断点续传下载函数
  6. 留言本(5)回复留言
  7. AD PCB 错误检查
  8. 初识微信小程序 文本样式设置
  9. 直觉模糊Choquet积分算子的多属性决策及matlab应用
  10. TensorFlowKeras入门猫狗数据集识别