欢迎光临散文网 会员登陆 & 注册

学习记录之面向对象2

2022-07-24 21:54 作者:星月袭空  | 我要投稿

static final常量:

  • 必须声明同时初始化

  • 常常由类名来访问,不能被改变

  • 建议:常量名所有字母都大写,多个单词用_分隔

  • 编译器在编译时会将常量直接替换为具体的值,效率高

  • 何时用:数据永远不变,并且经常使用

抽象方法:

    • 由abstract修饰

    • 只有方法的定义,没有具体的实现(连{}都没有)

  1. 抽象类:

    • 封装共有的属性和行为-----------------代码复用

    • 为所有派生类提供统一的类型--------向上造型(代码复用)

    • 可以包含抽象方法,为所有派生类提供统一的入口(能点出来),派生类的具体实现不同,但入口是一致的,同时达到强制必须重写的目的

    • 重写所有抽象方法-------------------变不完整为完整

    • 也声明为抽象类-----------------------一般不这么用

    • 由abstract修饰

    • 包含抽象方法的类必须是抽象类,不包含抽象方法的类也可以声明为抽象类

    • 抽象类不能被实例化(new对象)

    • 抽象类是需要被继承的,派生类:

      • 重写所有抽象方法-------------------变不完整为完整

      • 也声明为抽象类-----------------------一般不这么用

    • 抽象类的意义:

      • 封装共有的属性和行为-----------------代码复用

      • 为所有派生类提供统一的类型--------向上造型(代码复用)

      • 可以包含抽象方法,为所有派生类提供统一的入口(能点出来),派生类的具体实现不同,但入口是一致的,同时达到强制必须重写的目的

成员内部类:应用率低,了解

  • 类中套类,外面的称为外部类,里面的称为内部类

  • 内部类通常只服务于外部类,对外不具备可见性

  • 内部类对象通常在外部类中创建

  • 内部类中可以直接访问外部类的成员(包括私有的)

    内部类中有个隐式的引用指向了创建它的外部类对象---外部类名.this------API时会用

匿名内部类:重点-----------------大大简化代码

  • 若想创建一个类(派生类)的对象,并且对象只被创建一次,可以做成匿名内部类

  • 匿名内部类中不能修饰外面局部变量的值,因为在此处该变量会默认为final的

接口:

  • 是一种引用数据类型

  • 由interface定义

  • 只能包含常量和抽象方法

  • 接口不能被实例化(new对象)

  • 接口是需要被实现/继承的,实现类/派生类:必须重写所有抽象方法

  • 一个类可以实现多个接口,用逗号分隔。若又继承又实现时,应先继承后实现

  • 接口可以继承接口

  1. 类型间关系:

    • 类和类-------------------------继承

    • 接口和接口-------------------继承

    • 类和接口----------------------实现

  2. 设计规则:

    • 将所有派生类所共有的属性和行为,抽到超类中----------------------抽共性

    • 若派生类的行为都一样,设计为普通方法

      若派生类的行为都不一样,设计为抽象方法

    • 将部分派生类所共有的属性和行为,抽到接口中

      接口是对继承单根性的扩展-----------------------------------实现多继承

      接口是一个标准、规定----------后期慢慢体会,现在先不需要纠结

  3. 如何调错:

    • 将方法的调用都注释起来,然后一个一个的放开,放开哪个报错问题就在哪个方法

    • 快速锁定问题方法:

    • 打桩:System.out.println(数据);

    多态:

    • 意义:

      • 同一个对象被造型为不同的类型时,有不同的功能

        ---对象多态:我、你、水-------------------所有对象都是多态的(明天再详细讨论)

      • 同一类型的引用指向不同的对象时,有不同的实现

        ---行为多态:cut(),move(),getImage()......---------所有抽象方法都是多态的

    • 向上造型:

      • 超类型的引用指向派生类的对象

      • 能点出来什么,看引用的类型

      • 能造型成为的类型有:超类+所实现的接口

    • 强转类型转换,成功的条件只有如下两种:

      • 引用所指向的对象,就是该类型

      • 引用所指向的对象,实现了该接口或继承了该类

    • 强转时若不满足如上条件,则发生ClassCastException类型转换异常

      建议:在强转之前先通过instanceof来判断引用指向的对象是否是该类型


    String:字符串类型

      • java.lang.String使用final修饰,不能被继承

      • java中的String采用Unicode编码格式,任何一个字符都占用两个字节

      • String字符串底层封装了字符数组

      • 字符串一旦创建,对象内容永远无法改变,但字符串引用可以重新赋值----不变对象

      常量池:

      • java对字符串有一个优化措施:字符串常量池(堆中)

      • java推荐我们使用字面量/直接量的方式来创建字符串,并且会缓存所有以字面量形式创建的字符串对象到常量池中,当使用相同字符量再创建字符串时会重用对象以减少内存开销,避免内存中堆积大量内容相同的字符串对象





学习记录之面向对象2的评论 (共 条)

分享到微博请遵守国家法律