Java基础之类与对象、封装、this、super
面向对象
概念:面向对象它区别于面向过程,强调的是通过调用对象的行为来实现功能,而不是自己一步步的去操作实现。
特点:面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成一个指挥者,其实面向对象的底层还是面向过程,只不过这种思想将事物模型化了,一个事物就好比一个盒子,里面有属性、方法,我只需要来调用这个模型去解决问题即可,至于里面的具体过程是如何实现的,无须关心。
面向对象和面向过程各自的优缺点
面向过程
优点:比面向对象性能高,因为它省去了对象实例化的一个过程,在有些强调性能的软件方面,可以使用面向过程的思想,比如Linux开发;
缺点:程序不易维护、不易扩展、耦合度比较高,而且不易复用。
面向对象
优点:比面向过程更易维护、更易扩展、低耦合、易复用;
缺点:性能比较低,内存开销比较大。
对象内存图
虽然每个对象的实例化拥有不同的属性,但是他们的方法是公共的,而且不会说每个对象的方法都会占用一块内存空间,他们每个实例都在堆内存中保存一个方法标记,然后去方法区里面找真正的这个方法。
成员变量和局部变量的区别
- 在类中的位置不同
成员变量:类中,方法外
局部变量:方法中或者方法声明上(形式参数) - 作用范围不一样
成员变量:类中
局部变量:方法中 - 初始化值的不同
成员变量:有默认值
局部变量:没有默认值。必须先定义,赋值 - 内存中的位置不同
成员变量:堆内存
局部变量:栈内存 - 生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
封装
面向对象思想是对客观世界的一个模拟,而在现实世界中,成员的属性都是保存在对象内部的,对外不可见,封装可以认为是一个保护屏障,将一个对象的成员属性隐藏了起来,外界只有通过该类提供的公有的方法才可以对其进行访问,合理的封装提高了类的安全性,避免外界随意的修改其值。
构造方法
概念:当一个对象被创建的时候,构造方法用来初始化该对象,该对象的成员变量赋值,无论你是否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数的构造方法,一旦自己定义了构造方法,那么默认的无参构造方法就会失效。
this,super,this(),super()
this的用处:
- 指代当前对象本身,相当于指向当前对象的一个指针;
- 避免语义的混淆,在区分一个类的成员变量和形参的时候,用
this.name = name
来避免二义性。
super的用处:
- 指代当前对象的最近一层的父类,相当于指向当前对象最近一层父类的指针;
- 可以用来访问父类中的非私有的方法(构造方法不可以);
- 也可以做一个区分,如果当前子类的方法和父类的方法、属性重名了,可以用来区分。
this():
调用当前类中的另一种形式的构造方法(放在构造方法第一行);
super():
调用父类的构造方法(放在构造方法第一行);
注意:
- this()和super()不能放在一个构造方法中使用,因为两个都要处于第一行。
- super()是在子类中调用父类的构造方法
- this()是在本类中调用其他重载形式的构造方法
- 从本质上讲,this是一个指向本对象的指针,而super是Java中的关键字。