您的位置:首页 > 其它

面向对象知识总结

2016-09-10 16:46 232 查看
面向对象

一、成员变量和局部变量的对比

1、成员变量有默认值;局部变量没有默认值

2、成员变量在堆中开辟内存;局部变量在栈中开辟内存

3、成员变量是随着对象的创建而开辟内存,随着对象的被垃圾回收而释放内存;局部变量随着其所属的方法被调用而开辟内存,随着作用域的结束而释放内存

4:局部变量的作用域从其定义的位置开始到其所在的大括号结束;   成员变量的作用域是整个类

二、面向对象的三大特点:继承、封装、多态

封装:对外提供有用的属性和方法

构造方法的特点:(当自己在类中定义了构造方法,那么默认的构造方法就不存在了)

1:必须和类名相同

2:不能有返回值类型(包括void)

3:构造方法不能 被单独调用

构造方法一般用于属性的初始化

this:是一个引用,总是指向当前正在被使用的对象

static:静态的,可以修饰成员,成员变量,成员方法

被static修饰的成员变量的特点:

1:被所有的对象共享

2:随着类的加载就在方法区中的静态区中开辟内存了,所以优先于非静态成员的存在

3:既可以使用类名访问,也可以使用对象访问

缺点:占用内存时间太长,程序结束是才释放内存。

静态成员变量和非静态成员变量的对比:

1:存储数据:

非静态成员变量存储的是每个对象特有的数据

静态成员变量存储的是所有对象共享的数据

2:存储位置:

非静态成员变量是随着对象的创建在堆中开辟内存

静态成员变量是随着类的的加载在方法区的静态区开辟内存

3:生命周期:

非静态成员变量是随着对象的创建而在堆中出现,随着对象的被垃圾回收而释放内存

静态成员变量是随着类的加载在静态区中的出现,随着程序运行结束才消失

4:访问方式:

非静态成员变量只能通过对象来访问

静态成员变量既可以通过对象访问也可以使用类访问

静态只能使用静态的

非静态的既可以使用静态的也可以使用非静态的

什么时候使用static

1、什么时候把成员变量修饰为静态?

当成员变量的值需要被所有对象共享时

2、什么时候把成员方法修饰为静态的

当该成员方法没有使用到所属类的任何非静态成员时

静态代码块:随着类的加载而执行,只执行一次,且优先于main函数的执行

可以用于类的初始化

构造代码块:对象一创建就执行,优先于构造方法的执行

构造方法是用于初始化每个对象,而构造代码块可以把所有对象共有的属性初始化

对象的初始化过程:

1、因为创建对象需要字节码文件,所以先加载字节码文件到方法区

2、如果有静态代码块执行静态代码

3、在堆中开辟内存

4、为成员变量赋默认值

5、为成员变量赋初始值

6、执行构造代码块

7、执行构造函数

8、把对象在堆中的内存首地址赋给栈中的引用变量

设计模式:解决某一类问题最有效的方式

单例设计模式:一个类在内存中只有一个对象

1、构造方法私有化

2、在该类中创建此类的实例

3、使用public的静态方法把对象提供出去

继承:

1、实现了代码的重复利用

2、使类和类之间产生了关系

被继承的类是父类,继承的类是子类

继承是单继承的:

单继承(一个类只能有一个父类)

多继承(一个类可以有多个父类)

为什么要单继承:

因为多继承会出现调用的不确定性 

继承中成员变量的特点:

super不是一个引用,当子父类中出现同名现象时,用于区分子父类中成员的

this是一个引用

父类所有私有的属性子类都已经继承了,只是没有访问的权限

继承中成员方法的特点:

重写(覆盖):子类出现了和父类一样的方法,当创建子类对象调用这个一样的方法时,执行的是子类的方法

注意:

1、子类在重写时,权限必须大于等于父类中方法的权限

2、父类中私有的方法不能被重写

3、静态只能覆盖静态

4、父类中的方法返回值类型是引用类型时,子类在重写时返回值类型可以是父类的类型也可以是子类类型

继承中构造方法的特点:

在创建子类对象时,总是先调用父类的构造方法,再调用子类的构造方法,原因是系统自动在子类函数的第一行加入了一条语句:super(),这条语句默认是调用父类的无参构造方法

为什么先调用父类的构造方法?

子类继承了父类,必然会继承父类中的成员变量,可以利用父类中的构造方法为子类中的成员变量初始化

如果父类中不存在无参的构造方法,那么子类必须手动加入super()语句,调用父类中已经存在的某一个参数

Final:修饰类,方法,成员变量,局部变量

Final:修饰类,类不能有子类

   修饰方法,子类不能被重写

修饰成员变量或局部变量,值不可更改

当局部变量为方法中的变量,如 fun(final int a, final int b),那么a b的值不能修改

final修饰引用类型的成员变量,那么这个成员变量指向的对象不能改变

抽象类:在提取父类的过程中,子类对某一个共同的行为有不同的实现方式,父类不能确定如何实现,那么这个方法就是抽象方法,含有抽象方法的类就是抽象类

抽象类的特点:

1、抽象类不能创建对象,因为含有抽象方法

2、子类在继承抽象类时,如果没有重写父类的抽象方法,那么子类也必须为抽象类

抽象类一定是父类吗?

一定是父类,如果他不作为父类,没有其他用途

抽象类有构造方法吗?

有构造方法

抽象类和普通类的异同:

相同点:都是类,都是用来描述事物的

不同点:1、抽象类不能创建对象,普通类可以

2、抽象类可以含有抽象方法,普通类不可以

abstract和哪些关键字不能同时使用?

1、final:final修饰的方法不能被重写,抽象方法必须可以被重写

2、static:static修饰的方法可以直接通过类名调用,抽象方法不能被调用

3、private:private修饰的方法不可以被重写,抽象方法必须可以被重写

抽象类一定含有抽象方法吗?

不一定,有抽象方法,必须是抽象类,抽象类不一定含有抽象方法;当不希望一个类被创建对象时可以把类修饰为抽象的

 

接口:接口可以多实现,解决了java的单继承问题

定义形式:

Interface 接口名{

public static final 成员常量

public abstract 抽象方法

}

为什么可以实现多个接口:因为接口中的方法都是抽象的,子类在实现接口时重写了该方法,当创建子类对象并调用重写的方法,很明确是在调用子类中重写的方法

一个类在继承的同时还可以去实现接口

 

类和类之间是继承关系

类和接口之间是实现关系

 

通过继承可以得到继承体系的基本功能

通过实现接口可以得到体系之外的功能

 

接口的好处:1、接口时对外暴露的规则

  2、使用接口可以降低类之间的耦合度

4、提高了程序的扩展性

接口和抽象类:

1、同一类事物,具有相同属性或者行为的,我们可以抽取其共性,放入抽象类中

2、不同类的事物,但具有相似的行为,我们可以用接口来表示

多态:多种形态,父类类型的引用指向了子类对象

存在多态的前提条件:存在继承

多态的弊端:只能调用父类中存在的功能

多态的好处:提高程序的扩展性(扩张功能时),前期定义的功能可以被后期出现的事物使用

多态中成员的特点:

1、成员变量: 编译时期能使用哪些成员变量看父类,执行结果还看父类

2、成员方法: 编译时期能使用哪些成员方法看父类,执行结果还看子类(当子类重写了父类的方法时)

3、静态方法: 编译时期能使用哪些静态方法看父类,执行结果还看父类

模板设计模式:在实现一个功能时,功能的一部分是确定的,另一部分是不确定的,确定的部分还会用到不确定的部分,那么就把不确定的部分暴露出去,让子类去实现

内部类:在一个类内部定义的类叫做内部类

成员内部类----因为是非静态的,所以必须通过outer类的对象访问

静态内部类:内部类中含有静态成员,内部类必须是静态的

内部类得到外部类对象:外部类名.this

内部类得到外部类中的成员:外部类名.this.成员名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: