Javaopp面向对象部分核心知识梳理

目录

前言:

一.面向对象和面向过程

面向过程

面向对象

面向过程与面向对象

二.类和对象

概念

成员变量(静态成员变量 和 非静态成员变量)

成员方法(静态成员方法 和 非静态成员方法)

代码块(实例代码块 和 静态代码块)

构造方法  特殊  用来为成员变量初始化  

定义:

特点:

作用:

对象

对象和引用

三.this关键字 表示当前正在调用的对象

四.static关键字 

概念

static修饰成员

static修饰方法

总结     

五.包 管理类 避免类重名,按功能进行组织管理,访问权限的控制

问题:

包:

作用:

命名规范:

六.访问权限修饰符

七.面向对象3大特征--封装

概念

分类

八.继承

概念

特点:

优点:

方法重写

super

继承中构造方法调用

九.抽象类和抽象方法

抽象类:

抽象方法:

十.多态

优点:

缺点:

多态注意事项:

十一.接口

 接口                                                                                                                                           

 接口和抽象类区别

总结


前言:

此文章为Javaopp面向对象部分核心知识点梳理,不包括代码演示部分,如果需要代码演示来更好的了解面向对象,可回顾Javaopp面向对象01至04

一.面向对象和面向过程

面向过程

面向过程,适合简单的程序设计,按照步骤一步一步区实现,以函数进行组织

典型的代表语言:c语言

面向对象

面向对象,适合复杂的程序设计,先宏观分类人,类与类之间建立联系,以进行组织

典型的代表语言:c++,c#,java,python

  代码复用,代码扩展,

  开车和造车

面向过程与面向对象

面向过程和面向对象都是程序设计的一种风格(思想)

面向对象适合复杂问题,先宏观的分类设计,具体某一个步骤落地时,又需要面向过程,他们是相辅相成的

二.类和对象

类(class)和对象(object)是面向对象的核心概念

概念

    具有相同特征的事物的抽象描述(定义)

    是一类事物属性 和 行为/功能抽象(概念,模板)

成员变量(静态成员变量 和 非静态成员变量)

成员变量(在类中定义)
       可以使用基本数据类型,也可以使用引用数据类型
       java中在使用前都必须初始化
       成员变量可以不对其初始化,系统会默认进行初始化(默认值)
       成员变量可以在成员方法,构造方法,代码块中使用

成员方法(静态成员方法 和 非静态成员方法)

1.形参列表:表示成员方法的输入

2.返回数据类型:表示成员方法输出,void表示没有返回值

3.方法主体:表示为了实现某一功能的代码块

4. return语句不是必须的

代码块(实例代码块 和 静态代码块)

定义在类中,类似于一个没有名字的方法,

分为

1、实例代码块

{

}

实例代码块:在创建对象时,被自动调用执行

2、静态代码块

static{

}

静态代码块:在类被加载时,被自动的调用执行

因为代码块没有名字,只能在满足条件时,自动由系统调用


类什么时候被加载                                                                                                                              
        通过类名访问类中静态成员时,类会被加载
        当一个类中使用main方法,也会加载类
        创建对象也会加载类
类只被加载一次

注意:如果有多个实例代码块或多个静态代码块,他们会按照先后顺序执行

           实例代码块先于构造方法执行 

构造方法  特殊  用来为成员变量初始化  

类的构造方法,类没有定义时,会默认又一个无参的构造方法
构造方法的名字与类名相同

定义:

构造方法名字与类名相同,且没有返回值,且不需要void修饰

特点:

类中没有定义时,会默认有一个无参的构造方法,在无参的构造方法中为成员变量赋初始值
我们还可以定义有参的构造方法,通过有参的构造方法为成员变量进行初始化赋值
一旦类中定义了有参的构造方法,那么默认的无参的构造方法便会失效
如果需要,需要显示的定义无参构造方法

作用:

用来对新创建的对象中的成员变量进行初始化

对象

  对象是以类为模板在内存中创建出来的一个实例(对象,具体的可以使用的)

对象和引用

  引用类型变量

    Car car = new Car();

    Car car1 = car;

    对象在堆内存中存储

    car拿到的不是对象本身,而是对象的内存地址。

三.this关键字 表示当前正在调用的对象

       在编程时,为了区分成员变量和局部变量,在编码时,可以使用this关键字进行提示,
       使用this调用的是成员变量或者成员方法,还有构造方法
       this在实际的运行时,表示当前正在调用此方法的对象
       this表示当前对象

四.static关键字 

概念

static表示静态,可以修饰成员变量,成员方法,代码块,内部类

类--class--静态代码  只有一份的存在

静态表示--在内存中只有一份的存在

static修饰成员

static修饰的变量就是静态变量(类变量,与类一样,只有一份)
当所以类的对象的某一个属性值相同时,可以把他定义为静态的
当类被加载时,静态的成员就会被加载,先于对象创建存在
静态的先执行,可以被类,对象访问,非静态的只能通过对象访问

static修饰方法

static 关键字修饰的方法就是静态方法,属于类,我们可以通过类名直接访问
当方法中不需要使用非静态的成员变量时候,我们可以将这个方法设计为静态方法,不需要创建对象,直接通过类名访问

总结     

  static修饰后的成员,随着类的加载而加载
  先于对象而存在
   static修饰的成员变量在内存中只有一份,适合将所有实例都相同的属性设计为静态(中国人类 国籍都是人类)
   静态的成员可以使用类名/对象名调用,一般建议使用类名访问

   static修饰方法
   静态方法只能访问静态的变量,不能访问非静态的变量
   在方法中不使用非静态成员变量时,可以将方法设计为静态
      public int max(int a,int b){
          return (a>=b)?a:b;
      } 

五.包 管理类 避免类重名,按功能进行组织管理,访问权限的控制

问题:

项目越写类越多,难免可能会出现同名的类(java.util.Date,java.sql.Date)

不同类功能不同,需要分类管理

包:

为了解决一些类管理的问题,java引入包机制来解决

包称为类的命名空间(可以理解为是一个文件夹)

是类名的组成部分

类名(全类名=包名(地址)+类名简称

                      day1.demo2.Car

作用:

一个类属于不同的包,就可以避免同名类问题

按照不同的功能管理类(web层,service逻辑处理,dao数据管理访问层)

控制访问权限

命名规范:

包名单词全部小写

包命名:

  第一级,项目类型  com,org,gov,edu......

  第二级,公司名称  oracle,sun,huswei,ali,ffyc.....

  第一级,项目名称  oa,erp,cms.....

  第四级,功能模块名称  .....

导入外部包的类,关键字”import"

当在一个类中使用其他包中的类时,需要先使用impor关键字导入进来(全类名)

只有Java.lang包中的类比较特殊,使用时不需要导入 

六.访问权限修饰符

访问权限修饰符,用来修饰类中的成员,控制是否可以被访问

从大到小

public:公共权限,在系统中哪里都可以访问

             修饰类(包含内部类),方法(构造方法,成员方法),成员变量

protected:受保护权限,在本类,同包类,不同包子类中可以访问

                   修饰内部类,方法(构造方法,成员方法),成员变量

               :默认权限,在本类,同包类访问

                   修饰类(包含内部类),方法(构造方法,成员方法),成员变量

private:私有权限 只能在本类中使用 

              修饰内部类,方法(构造方法,成员方法),成员变量

七.面向对象3大特征--封装

概念

1、包装,例如我们将一些常用的功能进行抽取,定义成一个方法

2、面向对象特征中的封装:隐藏,对类中的成员对外是否可见进行控制

使用权限修饰符控制成员对外可见性

分类

    成员变量私有化

    构造方法私有化

八.继承

概念

子继承父  儿子就可以拥有父亲的功能

面向对象语言也引入了继承的思想

猫和狗  都用有名字,年龄,吃东西的属性和行为

可以将这些共性的属性和行为进行抽取,这样就不需要在每个类中定义同样的属性和行为,只需要类与类之间建立继承关系

特点:

 子类继承父类后,拥有父类所有的实例变量和方法
  但是不能直接访问私有成员
  java中一个类不能继承多个类
  只能直接继承一个类,但是可以多层继承

优点:

减少代码冗余,提高代码复用性

提高程序功能的扩展性(分别在猫和狗类中维护他们各自特有的属性和行为)

方法重写

    方法的重写
      有时候,父类方法中的实现(父类方法中为完成功能所写的代码),不能满足子类中的需要 (与子类中的实现不同)
      就可以将父类中的方法在子类中进行重写(在子类中对父类中的方法进行重新定义)
      这样子类中的重写的方法,就会覆盖掉父类中方法

    重写方法时的语法规则:
      方法名相同,参数相同
      方法返回值类型相同
      子类重写的方法权限必须等于或大于父类方法的权限
      子类重写的方法结构应与父类方法结构一致

super

在子类中使用super关键字,访问父类中定义的那部分成员

super.成员变量

super.成员方法(常用)当子类中重写了父类方法时,为了区分调用的是父类中还是子类中重写的方法,使用super调用父类中的

super()表示调用父类中构造方法

继承中构造方法调用

总是在子类的构造方法中,使用super()调用父类中的构造方法

为了确保对父类成员进行初始化

      默认在子类中的构造方法中,会默认调用父类中的构造方法
      每当创建子类对象时,会调用子类构造方法,在子类构造方法中调用父类构造方法
      而且在子类构造方法的第一行就会调用父类构造方法,先确保父类中的成员被初始化


      子类构造方法中默认会调用父类无参构造方法、
      如果需要显示的使用super调用,必须放在构造方法的第一行
      还可以调用父类中指定的构造方法 

九.抽象类和抽象方法

抽象类:

               被abstract关键字修饰的类,里面可能会包含抽象方法
               当类中没有足够的信息(抽象方法)来描述一个具体的对象时

               抽象类除了不能创建对象之外,类的其他功能都正常(成员变量,构造方法)

               抽象类一般位于类结构的上层,用来定义有哪些功能,让具体的子类继承实现即可

               静态的方法不能被修饰为抽象的方法的
               一个类中可以定义多个抽象方法的

抽象方法:

                定义方法,没有具体的实现,子类进行重写

十.多态

  类与类要有继承关系

  父类类型表示子类对象

优点:

只需要定义一个方法,处理不同的子类,提高程序的扩展性

缺点:

为每一种对象定义一个方法,不便于程序的扩展,每添加一种类型,就需要修改代码

多态注意事项:

注意成员调用时分为编译期间和运行期间
编译期间:写代码时,由于类型上升为父类类型,所以只能调用到父类中定义成员
运行期间:运行代码时,实际调用的是子类中重写的方法

对非静态成员方法:
  编译看左边,运行看右边
对于静态成员方法h和成员变量
  都是编译看左边,运行也是看左边

十一.接口

 接口                                                                                                                                           

    是一种更为彻底的抽象,主要用来定义功能
    接口是不能被创建对象的,

    jdk8之后接口可以定义4中内容:
      1.静态常量
      2.抽象方法
      3.静态方法(jdk8之后才开始有的)
      4.默认方法(jdk8之后才开始有的)

      接口还可以继承其他多个接口

 接口和抽象类区别

  类实现接口,一个类可以实现多个接口
  MyInterfaceImpl类是MyInterface接口的实现类
  一个类如果实现接口,
  要么重写接口中抽象方法
  要么将此类声明为抽象类

  一个类只能直接继承一个类,间接多层继承多个类
  一个类可以实现多个接口
  一个接口可以继承多个接口

总结

面向对象目标:合理的组织类与类之间的关系,让程序设计复用性更高,扩展性更高。

  

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值