Java基础09——面向对象中的那些关键区别

Java基础09——面向对象中的那些关键区别

1.面向对象和面向过程的区别

面向过程(Procedure Oriented 简称 PO):把事情拆分成几个步骤(相当于拆分成一个个的方法和数据),然后按照一定的顺序执行。

面向对象(Object Oriented 简称 OO):面向对象会把事物抽象成对象的概念,先抽象出对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法。

2.局部变量和成员变量的区别

1.成员变量:在类中(方法外)声明的变量,在创建对象时会进行初始化(默认值)。

2.局部变量:局部变量就是定义在方法内部的变量,

局部变量的作用域:局部变量只能在方法内部使用

3.成员变量和局部变量的区别

  • 作用域不同

    局部变量的作用域仅限定于定义他的方法,在方法外无法被访问;

    成员变量的作用域是在整个类里边,所有的成员方法都可以使用它;

  • 初始值不同

​ 对于成员变量,如果在雷总没有给它赋予初始值,Java会给它赋一个默认值

​ 但是不会给局部变量赋初始值,因此局部变量在使用前必须初始化

  • 在同一个方法中不允许有同名的局部变量,在不同的方法中可以有同名的局部变量

  • 局部变量和成员变量名相同时,优先使用局部变量,遮蔽(shadowing)成员变量a,this关键字。

    例:this.a = a;

3.静态成员与实例成员的区别

Java中的静态成员和实例成员是有区别的,他们的作用域和作用方式是有区别的:

  1. 静态成员是类的成员,实例成员是对象的成员。

    静态成员是在类加载时的初始化,只有一个副本,可以被类的所有对象共享;实例成员是在对象创建时的初始化,每个对象都有自己的一份。

  2. 静态成员可以直接通过类名直接访问,不需要创建对象;实例成员需要通过对象来访问。

    例如,静态变量可以使用类名.变量名的方式访问,例如ClassNamestaticVariable;实例变量需要使用对象名.变量名的方式访问,例如obj.instanceVariable.

  3. 实例成员可以访问静态成员和实例成员,但静态成员不能直接访问实例成员。

    这是因为在实例化对象之前,静态成员已被初始化,而实例成员需要通过对象来访问。

  4. 静态成员可以在静态初始化块中初始化,实例成员需要再构造函数中初始化。

    静态成员适合存储类级别的信息,例如类的常量、类方法、类变量等;实例成员适合存储对象级别的信息,例如对象的状态,对象属性等。在编写java程序时,需要根据需要选择合适的静态和实例成员,以实现代码的高效和可维护性

4.this和super关键字的区别

都属于引用对象。

  • 调用方法

    • this访问本类中的方法,包括从父类集成的方法
    • super访问父类的方法
  • 调用构造方法

    • this([参数列表])表示调用本类的构造方法,必须放在构造方法的首行
    • super([参数列表])表示调用父类构造必须放在子类构造方法首行。如果表示调用父类的无参构造,即super()可省略
  • 调用字段

    • this.字段 : 调用的是当前对象的字段,包括从事类继承的字段
      super.字段 :调用的是父类中的字段
  • 使用

    • this在实例方法中可以使用,在static方法中不能使用,每个类都有this
    • super在实例方法中可以使用,在static方法中不能使用,只能出现在子类中
  • 其他区别

    • this表示当前对象
    • super不能表示当前对象

5.隐藏和重写

隐藏是对于静态方法和成员变量(静态变量和实例变量)而言的,当发生隐藏的时候,声明类型是什么类,就调用对应类的方法,而不会发生动态绑定。子类中有和父类的同名的变量,就会发生隐藏(hiding),非static相同时是重写

父类中的方法不满足现有的需求,所以子类重新去做定义实现,在继承过程中,子类和父类方法同名同参同返回值类型的方法;

6.方法重载和方法重写的区别

  1. 方法重载指的是在同一个类中,定义了多个方法,它们的方法名相同但参数列表不同(参数类型、个数或顺序)。

​ 方法重载的目的是为了提高代码的复用性和可读性。

  1. 方法重写指的是子类重写了父类的方法,方法名和参数列表都相同。重写方法必须与父类方法的返回类型、异常抛出等相同或兼容。

    当我们调用一个对象的被重写的方法时,实际上会调用子类中的方法,而不是父类中的方法。

  2. 重写方法的目的是为了改变方法的实现方式,使得子类可以根据自己的特殊需求来实现父类的方法。

  3. 静态方法不能被重写,重写只能发生在实例方法中

  4. 发生重写后,子类和父类都只调用重写后的方法

  5. static方法发生隐藏后,父调父,子调子

总的来说,方法重载是在一个类中定义多个同名但参数不同的方法,而方法重写是在子类中重写父类的方法,方法名和参数都相同。方法重载是编译时多态,方法重写是运行时多态。

7.直接继承和间接继承

Java类如果没有用extends 去显式的继承一个类,则这个类继承了java.lang.Object

Object类是所有类的根类。每个类都是object类的子类。所有的Java类都直接或间接地继承了java.lang.Object

8.==equals的区别

==判断两个变量值是否相等,引用数据类型的值是其地址(引用)

equals用于判断两个对象 是否相等,基于内容(字段),避免空指针异常

9.向上转型和向下转型

父类类型 引用变量名 = new 子类类型();

子类向父类转换称为向上转型,父类类型的变量引用了一个子类对象,向上转型

想要调用子类方法时,可以通过把父类转换为子类实现,向下转型时必须使用强制类型转换。

语法规则:子类类型 引用变量名 = (子类类型)父类类型引用变量;

你可能感兴趣的:(java,Java基础,面向对象,java,开发语言)