对象实例与对象引用
new创建对象实例,对象实例存放在堆内存中;对象引用指向对象实例,其存放在栈内存中。
一个对象应用可指向0或1个对象实例,一个对象实例可被多个对象引用指向它。
其中"=="比较的是对象引用是否相等,即指向的内存地址是否相等;"equal"比较的是值是否相等。
构造方法
特点:
1、方法名与类名一致;
2、无返回值;
3、生成类的对象时自动执行,无需调用,且其可被重载,但不能被重写。
多态
多态是指一个对象具有多种状态,具体表现为父类的引用指向子类的实例。
特点:
1、对象类型与引用类型之间具有继承或调用关系;
2、引用类型(父类)变量在调用方法时,在运行期间才能确定具体是调用的哪一个类(子类)的方法;
3、父类不能调用子类有但父类没有的方法,父类只能调用父类中声明了且被子类覆盖的方法(或未覆盖的方法);
4、若子类重写了父类的方法,真正执行的是子类覆盖的方法;若子类没有覆盖父类的方法,执行的是父类的方法。
举例:
类B继承了类A,则使用语句A a = new B()实现多态,此时新建的对象a即可调用A的方法,也可调用B的方法,若B重写了A的方法,则调用对应方法时应执行B的方法。
编译类型取决于等号左边变量的类型,运行类型执行的是等号右侧变量的类型。
接口与抽象类的异同
相同点:
1、两者都可包含抽象方法;
2、两者都不能被实例化;
3、两者都可以有默认实现的方法。
不同点:
1、接口主要用于对类的行为进行约束,当一个类实现接口时就需要有对应接口中的方法。抽象类主要用于代码复用,强调的是所属关系;
2、一个类只能继承一个类,但是可以实现多个接口;
3、接口中的成员变量只能是public static final
类型的,不能被修改且必须有初始值;抽象类的成员变量默认default,可在子类中被重新定义,也可被重新赋值。
拷贝
浅拷贝
浅拷贝在堆上创建一个新的对象,如果原对象内部的属性是引用类型,则会直接复制内部对象的引用地址,即拷贝对象和原对象共用同一个内部对象。
大致原理图如下:
其中person1和person1Copy均为Person类型变量。
深拷贝
完全复制整个对象,包括这个对象所包含的内部对象,大致原理图如下:
引用拷贝
引用拷贝指两个不同的引用指向同一个对象,原理图如下: