面向对象中一些容易混淆的概念

静态变量和成员变量的区别

* 静态变量也叫类变量  成员变量也叫对象变量

* 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:接口与接口:

                                * 继承关系,可以单继承,也可以多继承。

成员区别
    * 抽象类(和普通类相比,只是可以多定义了抽象方法而已)
        * 成员变量:可以变量,也可以常量
        * 构造方法:有
        * 成员方法:可以抽象,也可以非抽象
    * 接口:
        * 成员变量:只可以常量
        * 构造方法:无
        * 成员方法:只可以抽象
关系区别
    * 类与类
        * 继承,单继承,多层继承
    * 类与接口:
        * 实现,单实现,多实现
    * 接口与接口多继承
        * 继承,单继承

猜你喜欢

转载自www.cnblogs.com/houjx/p/9388401.html