Java 面向对象 知识点基础浅谈

时间:2022-10-11 09:20:42

1.类和对象的关系

  类是一个抽象的模板,对象是根据模板制造出来的,只有类建立之后,对象才可以在类中实例化对象。举个例子讲:我要用黄金浇筑一块砖,我会在一个模型里进行,这样才能有砖的形状,那模型即是类,浇筑好的砖便是对象。

2.构造函数(构造方法)和成员方法

  构造函数也叫构造方法,据说之所以叫做构造函数就是为了区别普通的成员方法,构造函数与普通方法的区别在于;

  A。构造函数不需要在方法名前添加返回值类型,但是 成员方法需要在方法名前添加返回值类型,“void”也是返回值类型的一种。

  B。构造函数的方法名需要与类名一致,普通方法则随意。

  C。构造函数包含无参构造函数和有参构造函数,其中无参构造函数如果开发人员不写出来,系统将默认添加,但是不会显示出来,成员方法则没有这种现象。

  D。构造函数的语法:public 类名(形式参数列表){}         成员方法的语法: public  返回值类型 方法名(返回值参数列表){  return 返回值}

  E。构造函数的目的是为了给成员变量在主类中赋初值,也就只有这个功能,

3.this关键字和super关键字

考虑这样一个问题,我们为什么需要这两个关键词?

  this的需求缘由:在一个类中代表本类对象,然后解决成员变量(成员变量也叫全局变量)和局部变量的调用冲突问题,提高代码可读性,this负责调用成员变量语法格式为:this.成员变量名

                         :在一个类中调用成员方法,在调用成员方法可以省略,所以一般编程中并未显式的写出来,如果要书写语法为 this.方法名();注意一点这句修饰语必须写在成员方法内的第一行。              

                         :在一个类中调用构造函数,其中 this调用构造函数的范围是在一个构造函数内调用本类的另一个构造函数,两者不可互相调用,并且在普通成员方法内调用和被调用都是行不通的,需要注意的有使用this调用构造方法的语句必须放在构造方法内的第一行,并且只能出现一次。

  super的需要缘由:我用一个小例来叙述这个点,假如父类中有个A方法,这个时候我们需要在子类中重写父类的A方法,在子类中重写A方法之后,我们在子类中叫他为B方法,这个时候 我们知道  B方法只会显示我们重写A方法后在B方法中改变的地方,而不会显示之前A方法的内容,但是有些时候 我们想要在子类中显示A方法的内容,这个时候,super诞生了,代表父类引用对象。

                          :super可以修饰父类的成员变量、成员方法、构造方法,语法依次为:super.成员变量、super.成员方法(【参数1,参数2】),super(【参数1,参数2。。】)

                          :注意一点,super调用父类构造函数的代码必须位于该构造函数的第一行,并且只能出现一次。

4.封装

 封装相对以上内容来说,比较好理解,我们考虑一下,我们为什么需要封装、怎么封装、给谁封装?

   给谁封装?:

                      我们封装的对象是“类”,是要给Java 项目中最小的一个单位进行封装。

  为什么需要封装?:

                     无论任何程序都是由人类设计出来的,所以代码所体现的各种思维也是贴近现实的,举个例子讲:我们在生活中年龄和身高等数值是不会成为负数的,这叫非法赋值,再讲,我们的家是私密的,属于私人空间,不是任何人都可以进来的,所以我们给我们的私人空间建筑四面墙,留一个外界访问的门,这叫安全。所以封装的目的是为了控制给变量赋值时产生非法赋值的问题,再就是将类封装起来,提高安全性。

  怎么封装?:

                    在定义一个类时,会定义这个类的属性比如讲,人这个类里 有性别和姓名等属性。那么利用一个关键字  private 来修饰这些属性,那么用这个关键词封装之后也有弊端,就是只能在本类中被调用,其他类怎么用?为了能让外界访问我们的私有属性,需要提供一些public 修饰的公有方法,其中 用来获取属性值的getXxx()方法和改变属性值的setXxx()方法,具体操作不在赘述。

5.Static关键字

 见词知意,static(静态的),产生次关键字的主要原因是,例:1万个人在一所学校上学,我们不想给每个人的内存空间都加上学校名,而是想1万人公用这一个名字,所以,用static修饰的成员变量在内存空间中只有一份,不会重复创建。

 static可以修饰

                    1.成员变量   static修饰后变为   静态变量   语法为:static 数据类型 变量名; 静态变量可以被类中所有实例共享。访问的形式是 类名.变量名

                    2.成员方法   static修饰后变为   静态方法   语法为:权限修饰符 static 返回值类型 方法名(){  }  静态方法的调用有两种 可以使用1、实例化一个对象 对象名.方法名调用 2、类名.方法名 。个人更加推荐第二种,因为第二种可以省略实例化对象这一步,提高效率。

                    3.代码块      static 修饰后变为  静态代码块 语法为 static {  方法体 } ,在这里说明一下,static是随着类的加载而加载的,类只加载一次,那么静态代码块也只加载一次。

                   4. 成员内部类    static 修饰后变为  静态内部类  语法为 static class 内部类名{   }。在静态内部类中只能访问外部类的静态成员,在静态内部类中可以定义静态的成员。此处关于内外部类的问题后续会针对本模块进行更加详细的研究。

补充:static不能和this、super在一个方法*存,static不能修饰构造方法


 6.final关键字

 final有最终的、无法改变的含义。

 final可以修饰 变量(成员变量、局部变量),修饰的变量只能初始化,不能再次赋值,语法:final 数据类型 变量名 = 值;

 final可以修饰方法,修饰的方法可以被继承但是不能被重写,语法:访问权限修饰符 final 返回值类型 方法名(){    }

 final 可以修饰类,修饰的类不能被继承,继承之后则意味着将融入子类的特性,这样的话就与final不可改变的、最终的含义向悖。语法格式:final class 类名{     }


   7.抽象类

   抽象类的产生是因为抽象方法,为什么需要抽象方法?举例:一个富商的一个孩子要吃各种菜,但是又不确定他要吃什么菜,而这个时候富商为这个孩子请了个厨师,主要是为孩子提供服务,闲暇时候也为家庭其他普通成员服务。  那么厨师是抽象类,孩子就是抽象方法,因为抽象方法必须存在抽象类中,孩子想吃菜必须依靠厨师。那么他们两个是因为菜才联系到一起,所以菜就是一个修饰符,abstract,这个关键字只能修饰 类和方法修饰后变为抽象类、抽象方法,不可以修饰变量和构造方法。

     特性:抽象方法,抽象方法是没有方法体的,就是像上面例子讲的一样不确定自己要吃什么菜,语法为:      abstract 返回值类型 方法名(); 抽象方法必须存在抽象类中,有抽象方法存在的类中,该类必须声明为抽象类,普通方法可以存在抽象类中,抽象类中对抽象方法的要求是可有可无。

            :抽象类  抽象类不可以被实例化的,因为抽象类中有可能存在抽象方法,那么抽象方法没有方法体,不可以被调用。但是,抽象类可以被继承,语法为:abstract class 类名(){     }

      注意: 一个子类继承一个父类,如果父类是抽象方法,那么子类要实现(实现是接口的内容,在这里可以理解为 重写)父类的所有抽象方法,或者子类变为抽象类。

             : 一个抽象类的成员可以包括:成员变量、构造方法、方法

 

以上为随机整理的7个知识点。