面向对象知识总结
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.成员名
一、成员变量和局部变量的对比
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.成员名
相关文章推荐
- 面向对象知识总结
- 黑马程序员_面向对象知识总结
- 黑马程序员—面向对象知识总结(二)
- 黑马程序员——java基础面向对象基础知识总结
- javascript中面向对象中对象,属性,原型链和一些扩展知识总结
- 黑马程序员_C#面向对象知识总结3
- JAVA面向对象初步知识总结:封装、继承、多态
- 面向对象知识总结(3)
- php面向对象中的知识总结
- 黑马程序员-面向对象知识总结
- 黑马程序员_java基础知识总结(1)面向对象基础总结
- 黑马程序员学习log第五篇基础知识:JAVA的面向对象之集合总结
- 面向对象基础知识总结
- 黑马程序员学习log第六篇基础知识:JAVA的面向对象之IO总结
- PHP面向对象知识总结
- 黑马程序员_C#面向对象学习知识总结1
- 记忆总结——java面向对象部分的知识
- Java 面向对象基础 以及进阶知识 总结
- PHP面向对象基础知识总结(2012-07-11)
- PHP面向对象基础知识总结