面向对象基础总结

Posted 19322li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象基础总结相关的知识,希望对你有一定的参考价值。

1.对象和类

  1.1 对象和类的关系:对象是类的实例,类是对象的模板。

  1.2 对象:拥有属性和方法

    属性:静态特征,数据,变量

    方法:动态特征,行为,功能

    属性是数据,方法就是对数据的操作

  1.3 面向对象:
    对象:显示世界中的所有实体都是对象

     类 : 对具有共同属性和行为的对象进行抽象,得到的一个抽象的概念

    在面向对象编程时要追求低内聚,高耦合(模块越独立越好,模块间的关系越松散越好)

    面向对象编程的特点和好处:面向对象更方便代码的修改,维护,扩展;数据和功能是一个整体

2.封装

  2.1 什么是封装:
    将类的某些信息隐藏在类内部,不允许外部程序直接访问,通过调用方法来实现对隐藏信息的操作和访向。

    隐藏对象的属性和实现细节,仅对外提供公共访问方式。

  2.2.封装的好处:

    将变化隔离;便于使用;提高重用性;安全性。

  2.3 封装的格式:   

    1、使用访问修饰符修饰成员变量和成员方法
    2、对外提供getter和setter方法

3.继承
   3.1 什么是继承:

      继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

   3.2 继承的好处:     

      1、继承关系是传递的。可以在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。  

      2、继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。

      3、继承能减小代码和数据的冗余度,大大增加程序的重用性。

      4、继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。

      5、Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。

    3.3 继承的格式:

      子类名 extends 父类名{ }

    3.4 继承关系下代码的执行顺序 

      父类的静态代码块
      子类的静态代码块
      父类的构造代码块
      父类的无参构造方法
      子类的构造代码块
      子类的无参构造方法
      =============================
      父类的构造代码块
      父类的无参构造方法
      子类的构造代码块
      子类的有参构造方法
       总结:1、优先调用父类
          2、静态代码优先加载,且只加载一次(作用:第一个对象创建时,执行一些操作(记录日志:))
          3、构造代码块每次调用构造方法时都会调用(作用:每一个该类创建时可以记录日志)
          4、子类的构造方法不管有参无参都会先去调用父类的无参构造

 1 //测试类
 2 public class TestDemo{
 3     public static void main(String[] args) {
 4         Son son =new Son();
 5         System.out.println("=============================");
 6         Son son2 =new Son("name");
 7     }
 8 }
 9 //父类
10 class Father {
11     static {
12         System.out.println("父类的静态代码块");
13     }
14     {
15         System.out.println("父类的构造代码块");
16     }
17     public Father() {
18         System.out.println("父类的无参构造方法");
19     }
20     public  Father(String name) {
21         System.out.println("父类的有参构造方法");
22     }
23 
24 }
25 //子类
26 class Son extends  Father {
27     static {
28         System.out.println("子类的静态代码块");
29     }
30     {
31         System.out.println("子类的构造代码块");
32     }
33     public Son() {
34         System.out.println("子类的无参构造方法");
35     }
36     public Son(String name) {
37         System.out.println("子类的有参构造方法");
38     }
39     
40 }
41 //执行结果:
42 /*父类的静态代码块
43 子类的静态代码块
44 父类的构造代码块
45 父类的无参构造方法
46 子类的构造代码块
47 子类的无参构造方法
48 =============================
49 父类的构造代码块
50 父类的无参构造方法
51 子类的构造代码块
52 子类的有参构造方法
53 */

 

4.构造方法

  4.1 定义和作用
    在Java中,任何变量在被使用前都必须先设置初值。Java提供的为类的成员变量赋初值的专门方法。(初始化变量

  4.2  常识:子类的所有构造方法都会去访问一次父类的无参构造方法

    问题:为什么子类要去访问父类的构造方法?

    解析:因为子类继承父类,会继承到父类中的数据,所以必须要看父类是如何对自己的数据进行初始化的。所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程。

    问题:如果父类中没有无参的构造方法该怎么办?

    分析:父类中没有无参构造,那么子类在初始化的时候就会报错。

       解决办法:1、在父类中加一个无参构造方法

          2、通过使用super关键字去显示的调用父类的带参构造方法

          3、子类通过this去调用本类的其它构造方法(比如用子类的有参去调用自己的无参构造方法,但无参构造里一定要有super())

5.访问修饰符

  5.1 访问修饰符使用范围

    用来修饰成员变量和成员方法,不能用来修饰局部变量

  5.2 访问修饰符权限

            同类   同包    子类    其他包

    private          V  X   X  X

    默认     V   V           X       X

    protected   V        V           V       X

    public      V        V           V       V   

6.四个关键字   

  6.1 static(静态的)

    使用范围:用来修饰成员变量、成员方法和代码块

    作用 :

      1.想要实现对象中的共性数据的对象共享。可以将这个数据进行静态修饰。

      2.被静态修饰的成员,可以直接被类名所调用。

      3.静态随着类的加载而加载。而且优先于对象存在。

    命名方式:

      属性(成员变量):
          有static修饰:静态成员(静态变量)

         没有static修饰:实例成员(非静态变量)(非静态成员)

      方法(成员方法):          

          有static修饰:静态方法(静态方法)

         没有static修饰:实例方法(非静态方法)(非静态方法)

      代码块({ })  :

          有static修饰:静态代码块

         没有static修饰:非静态代码块(构造代码块)

     总结 :

      a.不管是静态方法还是非静态方法,都需要调用后执行,其执行的次序和在类里声明的次序无关,区别是静态方法是“class.method"方式执行,非静态方法是"object.method"方式执行,即后者需要创建一个对象。
      b.静态成员变量(也称类变量)先于非静态成员变量初始化,静态成员变量在类第一次加载时初始化,所有对象共享一份静态成员变量,非静态成员变量则在对象创建时初始化  

  

  6.2  final(最终的)

    使用范围:修饰类、修饰方法、修饰变量

    作用:1、修饰的类不可被继承

       2、修饰的方法不能被重写

       3、修饰的变量的值不能更改(即为常量,通常变量名全大写)

    作用(详细):

       1、被final修饰的类不能被继承

       2、被final修饰的成员变量

          a. 必须初始化值。

          b. 被fianl修饰的成员变量赋值,有两种方式:1、直接赋值 2、全部在构造方法中赋初值。

          c. 如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。

          d. 如果修饰的成员变量是一个引用类型,则是说这个引用的地址的值不能修改,但是这个引用所指向的对象里面的内容还是可以改变的。

       3、被final修饰的方法不能被重写

          a. 一个类的private方法会隐式的被指定为final方法。

          b. 如果父类中有final修饰的方法,那么子类不能去重写。

  6.3  this和super

       两者定义的区别:

          this代表本类的引用

          super代表父类存储空间的标识(可以理解为父类的引用,可以操作父类的成员)

       两者使用的区别:

          调用成员变量:

            this.成员变量     调用本类的成员变量

            super.成员变量 调用父类的成员变量

          调用构造方法:

            this(...)  调用本类的构造方法
            super(...)    调用父类的构造方法

          调用成员方法:

            this.成员方法     调用本类的成员方法

            super.成员方法  调用父类的成员方法

7.方法的相互调用

  7.1 同类 :

     静态调用静态

        a.直接调

        b.类名.方法名

        c.对象名.方法名(不建议使用,因为这样不能分辨是静态调静态还是静态调非静态)

     静态调用非静态

        创建调用类的对象,再对象名.方法名

     非静态调用静态

        a.直接调用

        b.类名.方法名

        c.对象名.方法名(不建议使用)

     非静态调用非静态

        a.直接调用

        b.对象名.方法名

  7.2 不同类

     静态调用静态

        类名.方法名

     静态调用非静态

        创建调用类的对象,再对象名.方法名

     非静态调用静态

        类名.方法名

     非静态调用非静态

        对象名.方法名

8.方法的重载

  同一个类中,方法名相同,参数的数量,类型,顺序不同即为重载(只与参数有关)

9.方法的重写

  发生在继承关系下,子类对父类允许访问的方法的实现过程进行重新编写, 方法声明相同(即返回值和形参都不能改变。即外壳不变,核心重写)

 

 

    

    

    

 

 

 

 

 

    

以上是关于面向对象基础总结的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段9——JS中的面向对象编程

面向对象基础总结

面向对象的三大特性之继承-基础知识总结------彭记(05)

java基础学习_面向对象(上)03_day08总结

Web3D编程入门总结——面向对象的基础Web3D框架

大数据必学Java基础(四十):面向对象三大特性之一继承(Inheritance)