面向对象中一些容易混淆的概念
Posted houjx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象中一些容易混淆的概念相关的知识,希望对你有一定的参考价值。
静态变量和成员变量的区别
* 静态变量也叫类变量 成员变量也叫对象变量
* A:所属不同
* 静态变量属于类,所以也称为为类变量
* 成员变量属于对象,所以也称为实例变量(对象变量)
* B:内存中位置不同
* 静态变量存储于方法区的静态区
* 成员变量存储于堆内存
* C:内存出现时间不同
* 静态变量随着类的加载而加载,随着类的消失而消失
* 成员变量随着对象的创建而存在,随着对象的消失而消失
* D:调用不同
* 静态变量可以通过类名调用,也可以通过对象调用
* 成员变量只能通过对象名调用
A:this和super都代表什么
* this: 代表当前对象的引用,谁来调用我,我就代表谁
* super:代表当前对象父类的引用
B:this和super的使用区别
* a:调用成员变量
* this.成员变量 调用本类的成员变量,也可以调用父类的成员变量(本类中没有的情况下)
* super.成员变量 调用父类的成员变量
* b:调用构造方法
* this(...) 调用本类的构造方法
* super(...) 调用父类的构造方法
* c:调用成员方法
* this.成员方法 调用本类的成员方法,也可以调用父类的方法(本类中没有的情况下)
* super.成员方法 调用父类的成员方法
父类没有无参构造方法,子类怎么办?
* super解决
* this解决
注意事项
* super(…)或者this(….)必须出现在构造方法的第一条语句上(也就是只能存在一个)
public Student(){
super(name,age);
}
public Student(){
this(name,age);
}
Override和Overload的区别?
* 方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的
* 方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。
抽象类的成员特点
* a:成员变量:既可以是变量,也可以是常量。abstract是否可以修饰成员变量?不能修饰成员变量
* b:是否有构造方法:有
* 用于子类访问父类数据的初始化。
* c:成员方法:既可以是抽象的,也可以是非抽象的。
抽象类的成员方法特性:
* a:抽象方法 强制要求子类做的事情(如果有子类,强制子类重写)
* b:非抽象方法 子类继承的事情,提高代码复用性(如果有子类,直接继承使用即可)
接口成员特点(接口都是暴露的原则,所以它的成员都是public的)
* 成员变量:只能是常量,并且是静态的并公共的
* 默认修饰符:public static final
* 建议:自己手动给出
* 构造方法:接口没有构造方法
* 成员方法:只能是抽象方法。
* 默认修饰符:public abstract
* 建议:自己手动给出
:类与类,类与接口,接口与接口的关系(前后一致就是继承;不一致就实现)
* a:类与类
* 继承关系,只能是单继承,可以多层继承
* b:类与接口:
* 实现关系,可以单实现,也可以多实现。(因为没有方法体,可以多实现且没有安全隐患)
* 并且还可以在继承一个类的同时实现多个接口(~接口的出现打破了单继承的局限性)
* c:接口与接口:
* 继承关系,可以单继承,也可以多继承。
成员区别
* 抽象类(和普通类相比,只是可以多定义了抽象方法而已)
* 成员变量:可以变量,也可以常量
* 构造方法:有
* 成员方法:可以抽象,也可以非抽象
* 接口:
* 成员变量:只可以常量
* 构造方法:无
* 成员方法:只可以抽象
关系区别
* 类与类
* 继承,单继承,多层继承
* 类与接口:
* 实现,单实现,多实现
* 接口与接口多继承
* 继承,单继承
以上是关于面向对象中一些容易混淆的概念的主要内容,如果未能解决你的问题,请参考以下文章