*************面向对象(重点)
一.什么是面向对象?
把现实中的事物抽象成一系列属性和行为组成的结构,每个结构体
都有属于自己的功能.
在软件开发过程中,通过对不同功能的结构体进行组合,完成整个软件功能.且结构体可复用(对现实世界的一种拙劣模仿,妄图用对象描述整个世界)
二.面向对象的三大特征:
封装 继承 多态(抽象)
三.类与对象的关系?
1.类:一种自定义类型
2.对象:符合类的具体特征
3.面向过程:凡是亲力亲为(所有想要的东西,都需要自己一步步的完成)
4.面向对象:找一个拥有次功能的人或者物件,帮助我们实现想要的功能或者东西,你是一个调用者
5.为什么说java是一种面向对象语言?
是因为java给我们封装了很多的功能jar包这些jar包或者类库里面有各种各样帮我们实现我们想要的功能的类.
对象格式:
类名 对象名=new类名();
类是一种数据类型(引用数据类型)类是对现实生活中一类具有共同特征的事物的表示对象是类的具体实例,一个类可以创建无数个对象.
public 公开的 在哪儿都能调用
protected 受保护的 子类可以调用 如果跨包使用该修饰符 就需要产生继承关系,然后调用被propected修饰的成员
默认的 同一包下可以调用,跨包不可以调用
private 私有的 只能本类内调用
defoult/package 修饰类,方法和变量 只有在同一个包下,再能被调用创建子类对象
四.六大组件
成员变量:定义在方法外的变量 随着对象的创建而创建 有默认值
成员方法:定义在类中的方法
静态变量:static修饰的变量 可以被多个对象共享 存储在堆内存 static方法只能调用被static修饰的方法 其他方法不可以调用static 方法
静态方法:static修饰的方法
局部变量:定义在方法中的变量 存储在栈内存
构造方法:用于创建对象使用的方法
五.封装
1.什么是封装?
成员变量私有化
2.为什么要封装?
保证类的完整性,不允许别人随意修改中属性或者代码,为了代码的安全性考虑
3.this 代表本类对象 谁调用了此函数,那么this代表谁
4.构造函数的格式
修饰符 类名(){方法体}
5.构造方法的用处
在对象进行初始化
当你在new 对象的时候,其实就是在对象进行初始化工作
其实创建对象的过程 就是new构造函数的过程
由上面信息得出,一个类想要被创建,必须要有构造方法 ,如果没有构造方法,那么此类将无法被创建对象.
如果我们没有人为的去给类创建构造方法,那么系统会默认给我们的类一个构造放方法
当我们给构造方法的时候,那么系统默认的构造方法也就不存在了.
六javabean书写规范
1.成员变量私有化
2.匿名对象书写格式
new 类名()方法;
static**
被他修饰的方法称为静态方法
被他修饰的变量称为静态变量
他优先与对象存在 所有的静态随着类的加载而加载
静态只能调用静态 如果想要调用非静态 必须要创建对象
静态变量会被全局共享,也就是被所有对象共享
可以通过类名的调用
静态代码块:优先与一切,随着类的加载而运行 格式static{方法体}
可以放一些初始化值,特别是那些 你希望他随着类的加载就自动初始化
构造代码块:格式{方法体}
优先与构造方法 他是在构造方法之前运行 对构造函数进行初始化 对对象值也可以进行初始化
局部代码块:写在方法中的 格式{执行代码块}
为了减少方法的承重,可以用局部代码块进行封装 然后随着局部代码块的执行完毕,对应的变量或者对象也就消失不见了 为方法的内存节省了开支.
七.关键字
1.继承的关键字extends
继承的格式
class 类名 extends 父类{ }
如果子父类中都有相同的属性,那么赋值的时候就会先在子类找,如果子类没有,再在父类中找,也可以通过this和super关键字去调用本类或者父类中的属性
2.万类之祖:Object
被继承的类称为父类,基类或超类
继承的类称为子类
子类只能继承父类所有非私有的成员(成员变量,成员方法)
3.super关键
子父类 没有重名成员属性,无论使用this还是super调的都是父类中的成员
重载:方法名一样,参数类型不同,与返回值无关
重写:方法声明一模一样,方法体不同
重写必须是父类和子类中的两个方法
4.final关键字
final关键字是最终的意思 可以修饰类,成员变量,成员方法.
修饰类,类不能被继承
修饰变量:变量就成了常量,只能被赋值一次
修饰方法:方法不能被重写.
final修饰的基本数据类型不能被修改.但是如果final修饰的引用数据类型
那么此引用的地址值不能被修改 但是引用数据类型中的具体成员,变量可以被重新赋值
5.抽象的关键字abstract
被abstract修饰的方法为抽象方法
被abstract修饰的类为抽象类
有抽象方法的类一定是抽象类
抽象类里面不一定有抽象方法
对于方法来说
public abstract void方法名();
对于类来说
abstract class 类名();
抽象类有构造方法,但是不能创建对象
6.接口:定义一个接口这个接口里面就有我们的新方法 只需要我们的类实现这个接口就可以完成方法的实现
接口的关键字为interface
格式:interface 接口名{抽象方法}
接口里面修饰符是可以省略的
接口里面的方法全部都是抽象方法
抽象类其实就是方法继承和延续 只能被继承 单继承
接口就是功能的扩展 只能被实现 但是可以多发现
接口中只有常量 没有构造函数 如果想要使用接口对象 那么就应该使用接口多态的形式
接口中的所有方法可以是抽象的
接口不能创建对象
八 形参与实参
注意事项
对于基本类型
形参的改变不回影响实参
对于引用类型
形参的改变影响实参
多态:事物的所中形态
多态的格式:
父类名 对象名=new 子类名();
父类引用指向子类对象
基于继承和重写
同名的成员变量:父类的
同名的静态变量:父类的
同名的静态方法:父类的
同名的成员方法:字类的
同名的构造方法:父类的
强转以后
同名的成员变量:子类的
同名的成员方法:子类的
同名的静态变量:子类的
同名的静态方法:子类的
九.内部类
在类中有写了一个类
成员内部类:成员方法或成员变量
局部内部类:局部方法
匿名内部类:匿名对象
静态内部类:静态方法或静态变量
1.成员内部类
a.不能被static修饰,修饰变量的修饰符都可以修饰成员内部类
b.调用内部类方法 Inter in=new Inter(); inshow();
c.成员内部类可以不受限制的访问外部所有变量 不管你是私有的,还是静态的
d.如果我在内部类中定义了和外部类一样的变量名,那么访问规则就是遵循就近原则
e.如果有多个重名变量,那么我如何调到外部类的同名变量
2.局部内部类:定义在方法内的内部类
局部内部类想要访问外部类变量,那么该变量需要被final修饰
3.匿名内部类:一个实现了接口或者继承了类的子类对象
匿名对象 : new 类名().方法名()
匿名内部类格式:new 父类名/接口名(){需要重写的方法}
什么时候使用?
如果接口或者父类里面有三个以下的为实现方法需要你重写,那么就建议你使用匿名内部类,因为书写方便,而且占用空间大 ,但是如果有三个以上不建议去使用
十.递归
递归注意事项
第一:递归必须要有接口.如果递归没有出口 那么就会形成死递归 死递归造成的结果就是内存溢出
第二:递归其实跟循环相似