OOP基础
面向对象编程 Object Oriendted Programming
在面向对象编程中,对象是程序的基本单元,对象把程序与数据封装起来提供对外访问的能力,提高软件的重用性,灵活性和扩展性。通常把对象的数据(字段)称为属性,把对象的行为称为方法。
数据类型
java基本数据类型
名称 | 数据类型 | 内存大小(bit) |
---|---|---|
字节 | byte | 8 |
字符 | char | 16 |
短整型 | short | 16 |
整型 | int | 32 |
长整型 | long | 64 |
单精度浮点数 | float | 32 |
双精度浮点数 | double | 64 |
布尔值 | boolean | 不确定 |
引用类型
引用类型:类、接口和数组
数组:基本数据数组和对象类型数组
基本数据数组
一维数组创建:
方法一:类型[ ] 数组名 = {元素1,元素2……};
方法二:**类型[ ] 数组名 = new 类型[长度];
二维数组创建:
方法一:数组类型[][] 数组名 = new 数组类型[ 长度1 ][ 长度2]
(长度2可暂时不给定)
方法二:
数组类型[][] 数组名 = {
{元素1,元素2……},
{……}
};
Array类:
原型声明:
public final class Array extends Object
特殊:
1、Array类不能被实例化
2、Array类的方法全部都是静态方法,而且构造方法被private修饰,它们的作用就是提供静态的函数库
对象类型数组
将类的对象作为数组的类型,使用方法和基本数据数组类似。
传值与传引用
基本类型参数传递时是传值
引用类型参数传递时是传引用
传引用的过程:
1、创建一个对象
2、定义一个类的变量
3、将对象的引用赋给该变量
面向对象编程
this、super、访问控制符
this的用法
this本质:创建好的对象的地址
this表示一个对象的引用,它指向正在执行方法的对象。
在构造方法中也可以使用this,因为在调用构造方法之前该对象已经创建好。
super的用法
super是指向父类的引用。
通过super显式访问父类属性和方法。
super()语句必须是构造方法的第一个子句。
访问控制符
private、protected和public
作用域 | private | protected | public |
---|---|---|---|
同一个类 | √ | √ | √ |
同一个包 | √ | √ | |
子类 | √ | √ | |
全局范围内 | √ |
类、接口、抽象类
类 class
1、类中定义属性和方法
2、可实例化出多个对象
抽象类 abstract class
子类继承抽象类关键字 extends
1.抽象类的方法可以不实现也可以部分实现。
2、子类必须全部实现抽象类的方法,否则也是抽象类
3、抽象类不能实例化,但是可以有属性和构造方法。子类可以调用该构造方法。
接口 interface
子类实现接口关键字 implements
1、子类必须全部实现接口的方法,否则子类为抽象类
2、其实接口可以间接性的创建对象。使用匿名内部类就是间接性创建了一个对象。
3、接口里面也是可以有自己的成员变量的,但是默认都是public static final.也就是说,定义的时候就得赋初值。
在实现某个接口时,方法太多用不上,可以先实现一个部分方法的抽象类,然后再用子类继承抽象类,减少子类中没有用到的方法。
重写与重载
重写 Override
子类把父类中的方法重新写一遍。方法返回类型和参数列表不变,对方法内容进行修改或重写。子类函数的访问修饰权限不能少于父类。
例如:实现多线程,继承父类Thread,重写其中的run()方法。
重载 Overload
在一个类中,方法名相同但参数列表不同。重载对返回类型没有要求,可以相同也可以不同。
例如:不同参数的构造函数
重写与重载的区别
1、都是多态性的体现,重写是运行时的多态性,重载是编译时的多态性。
2、重写发生在子类与父类之间,重载发生在一个类中。
3、重写要求参数列表相同,重载要求参数列表不相同。
继承与实现
1、继承 extends;实现 implements
2、同一个类只能继承一个父类,但可以实现多个接口,即单继承,多实现。
3、继承中可以定义属性和方法,变量和常量等;
接口中只能定义全局常量(static final),和无实现的方法。
4、继承可以实现部分方法,该子类也是抽象类;实现必须实现接口全部方法。
封装、继承、多态
封装、继承和多态是面向对象编程的三大特性。
封装:将对象所持有的属性和方法隐藏,仅对外提供公开的接口。
继承:指一个对象在声明继承另一个对象后,可以使用该对象中允许的属性和方法。
多态:即在不同情况下可以表现出不同的状态,或者说是调用不同的属性和方法