面向对象

面向对象

  • 面向对象 与 面向过程

    1. 宏观整体:面向对象;

    2. 微观操作:面向过程;

  • 本质:以类的方式组织代码,以对象的方式封装数据

  • this:代表当前类

  • 一个项目应该只有一个main方法

构造器

  1. 一个类即使什么都不写,也会存在一个方法:构造方法;

  2. 方法名与类名相同;

  3. 无返回值;

  4. 使用new关键词,本质是在调用构造器;

  5. 用来初始化值;

  6. Alt + insert:生成构造器

  7. 一旦定义了有参构造,如果想使用无参构造,则必须显式定义无参构造,否则无参构造就无效了;

image-20230111163431337

内存分析

image-20230111164842716

image-20230111165125972

image-20230111165209205

属性

默认初始化

  1. 数字类型:0 0.0

  2. char类型:u0000

  3. boolean类型:false

  4. 引用类型:null

封装

  1. 封装都是属性的封装,和方法无关;重写都是方法的重写,和属性无关;多态都是方法的多态,和属性无关。

  2. 属性私有(private修饰),通过 get/set 获取值(public 修饰);

  3. set 中可以做一些安全性的验证判断。

image-20230111170737956

image-20230111170648915

类之间的关系:依赖、组合、聚合、继承

继承

  1. is a”的关系;

  2. 可被子类继承的 属性方法,用“public”修饰;不被子类继承的 属性方法,用“private”修饰(私有的属性和方法无法被继承);

  3. 所有的类都默认继承 Object 类,即使没有显式的定义继承任何类;

  4. 只有单继承,没有多继承,可以多级继承;

修饰符

public --> protected --> default --> private

Ctrl + h:打开类的继承关系结构图

super 与 this

  • super 代表父类对象;this 代表当前对象;

  • 属性的使用:super.name、this.name;

image-20230112111437093

  • 方法的调用:super.print()、this.print();

image-20230112111930721

  • 私有的属性和方法无法被继承

image-20230112112112742

  • 调用父类构造方法:super();调用子类构造方法:this();

  • 隐藏代码“super()”,默认调用父类的无参构造器;且构造方法的调用必须放在方法的第一行;无论是super(),还是this();==> 因此,一个方法中只能调用一个构造器,要么 super(),要么 this();

image-20230112112321897

image-20230112112821300

  • 如果父类的无参构造 因 有参构造 失效,则子类因无法调用父类无参构造而报错;这时,可以显式的调用有参构造;如果不显式的调用父类的有参构造,则默认调用父类的无参构造

image-20230112114021140

image-20230112114216646

image-20230112114336378

image-20230112114606556

重写

  • 封装都是属性的封装,和方法无关;重写都是方法的重写,和属性无关;多态都是方法的多态,和属性无关。

  • 重写的前提条件:

    1. 非静态方法;

    2. 不能是private方法;

    3. 有继承关系,子类重写父类的方法;

  • 重写 与 重载

    1. 重写:

      方法名、参数列表相同;方法体不同;

      修饰符:范围可以扩大但不能缩小:public > protected > default > private

      抛出的异常:范围可以缩小但不能扩大:ClassNotFoundException < Exception

    2. 重载:方法名相同、参数列表不同

  • 静态方法:方法的调用,只与“=”左边定义的数据类型有关

  • 静态方法:不重写

image-20230112115923291

image-20230112190054943

  • 非静态方法:重写

image-20230112191350303

image-20230112190724534

多态

  1. 封装都是属性的封装,和方法无关;重写都是方法的重写,和属性无关;多态都是方法的多态,和属性无关。

  2. Java 中方法调用是在运行时才动态确定调用哪一个的;

  3. 不能多态的方法:

    • static 方法;

    • final 方法;

    • private 方法。

  4. 多态的前提条件:

    • 继承

    • 重写

    • 父类引用指向子类对象:Father f = new Son();(要么是父类 和 子类 的关系;要么是有联系;否则会出现类型转换异常:ClassCastException)

image-20230112194121682

image-20230112194510452

image-20230112194753576

instanceof

  • Father instanceof Son

image-20230112202305152

类型转换:

同基本类型数据的转换规则:低转高:自动转换;高转低:强制转换。

父类引用指向子类对象:低 转 高;对

子类引用指向父类对象:高 转 低;❌

 

image-20230112202745732

 
posted @ 2023-01-13 19:03  sunfy  阅读(31)  评论(0)    收藏  举报