隐藏

JAVA(多态)
2022年 02月 14 日

Calvin

  1. 理解多态性:可以理解为一个事物的多种形态。
  2. 何为多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)
  3. 多态的使用:

    • 有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。
    • 总结:编译,看左边;运行,看右边。
  4. 多态性的使用前提: 类的继承关系 方法的重写
  5. 对象的多态性,只适用于方法,不适用于属性(编译和运行都看左边)

为什么使用向下转型

    • 使用多态以后,内存中加载的是子类的对象的属性和方法。但由于声明的变量是父类的。导致编译的时只能调用父类的属性和方法。子类的属性和特有的方法不能调用。如果想使用子类的属性和特有的方法,只能向下转型
  • 7、()强制转化
  • 8、instanceof的使用:

    (A类 extend B类)
    
    a instanceof A :  判断对象a 是不是类A的实例 
    
      若 a是A的实例
      则 也是B的实例

final关键字:最终的

  1. final可以用来修饰的结构:类、方法、变量
  2. final 用来修饰一个类:此类不能被其他类所继承。

    • 比如:String类、System类、StringBuffer类
  3. final 用来修饰方法:表明此方法不可以被重写

    • 比如:Object类中getClass();
  4. final 用来修饰变量:此时的"变量"就称为是一个常量

    • final修饰属性:可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化
    • final修饰局部变量:尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。
  • static final 用来修饰属性:全局常量

---

Static修饰的代码块(初始化块/静态代码块)

  1. 代码块的作用:用来初始化类、对象
  2. 代码块如果有修饰的话,只能使用static.
  3. 分类:静态代码块 vs 非静态代码块
  4. 静态代码块

    1. 内部可以有输出语句
    2. 随着类的加载而执行,而且只执行一次
    3. 作用:初始化类的信息
    4. 如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行
    5. 静态代码块的执行要优先于非静态代码块的执行
    6. 静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构
    
  5. 非静态代码块

     * 内部可以有输出语句
     * 随着对象的创建而执行
     * 每创建一个对象,就执行一次非静态代码块
     * 作用:可以在创建对象时,对对象的属性等进行初始化
     * 如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行
     * 非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法
    

类内代码执行顺序:由父类先,子类后按顺序执行静态代码块,若无静态代码块或静态代码块已执行完毕,则依旧按由父及子的顺序执行构造器,最后是自定义的类

JAVA(多态)

  1. 理解多态性:可以理解为一个事物的多种形态。
  2. 何为多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)
  3. 多态的使用:

    • 有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。
    • 总结:编译,看左边;运行,看右边。
  4. 多态性的使用前提: 类的继承关系 方法的重写
  5. 对象的多态性,只适用于方法,不适用于属性(编译和运行都看左边)

为什么使用向下转型

    • 使用多态以后,内存中加载的是子类的对象的属性和方法。但由于声明的变量是父类的。导致编译的时只能调用父类的属性和方法。子类的属性和特有的方法不能调用。如果想使用子类的属性和特有的方法,只能向下转型
  • 7、()强制转化
  • 8、instanceof的使用:

    (A类 extend B类)
    
    a instanceof A :  判断对象a 是不是类A的实例 
    
      若 a是A的实例
      则 也是B的实例

final关键字:最终的

  1. final可以用来修饰的结构:类、方法、变量
  2. final 用来修饰一个类:此类不能被其他类所继承。

    • 比如:String类、System类、StringBuffer类
  3. final 用来修饰方法:表明此方法不可以被重写

    • 比如:Object类中getClass();
  4. final 用来修饰变量:此时的"变量"就称为是一个常量

    • final修饰属性:可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化
    • final修饰局部变量:尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦赋值以后,就只能在方法体内使用此形参,但不能进行重新赋值。
  • static final 用来修饰属性:全局常量

---

Static修饰的代码块(初始化块/静态代码块)

  1. 代码块的作用:用来初始化类、对象
  2. 代码块如果有修饰的话,只能使用static.
  3. 分类:静态代码块 vs 非静态代码块
  4. 静态代码块

    1. 内部可以有输出语句
    2. 随着类的加载而执行,而且只执行一次
    3. 作用:初始化类的信息
    4. 如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行
    5. 静态代码块的执行要优先于非静态代码块的执行
    6. 静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构
    
  5. 非静态代码块

     * 内部可以有输出语句
     * 随着对象的创建而执行
     * 每创建一个对象,就执行一次非静态代码块
     * 作用:可以在创建对象时,对对象的属性等进行初始化
     * 如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行
     * 非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法
    

类内代码执行顺序:由父类先,子类后按顺序执行静态代码块,若无静态代码块或静态代码块已执行完毕,则依旧按由父及子的顺序执行构造器,最后是自定义的类

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论