疯狂java学习笔记五--面向对象

面向对象(上)
1.类和对象
类定义:一类事物的共性抽象 例如:计算机
对象定义:某一个事物 例如:笔记本

类包含变量和方法,用class标识标识;对象是类的某一个实例,new 对象

java程序在内存中有几百几千个对象组成,没有对象实现不同的功能,就好像乐高的积木一样,
jvm负责通过class产生对象,通过对象的拼接,引用来完成各种任务.

2.成员变量和局部变量
(一般)成员变量的定义:定义在类当中,属于实例的变量.不可以重复
(一般)局部变量:定义在方法中或者代码块中的变量

生命周期:
成员变量存储在堆中,随着对象的产生而产生,随着对象的消失而消失.
局部变量存储在该方法对应的方法栈中,随着方法的执行而产生,随着方法的结束而结束.
3.方法
(一般)方法的定义:类的某种功能,属于实例对象,存储在内存方法区中,只有一份
4.面向对象的三大特征

1.继承

抽象类 abstract 修饰的类包含abstract修饰的方法.
抽象类一般用于部分方法不知道子类的实现逻辑的时候,由子类去实现的场合.
抽象类不可被实例化,通过抽象类如果被继承一定要实现所有的抽象方法,或者本身也是一个抽象类.

java是单继承,extends,继承可以继承父类的属性和方法,继承可以重写父类的方法展示不同行为.
初始化子类之前一定要初始化父类,
重写的定义:发生在父子类中,重写父类的方法,只要方法签名相同(返回值不同,访问符不同),方法体不同
重写遵循的原则:1.不可重写父类的private方法2.final修饰的类不可被继承3.子类的访问权限大于等于父类的访问权限4.子类的返回值小于等于父类的返回值5.子类的异常要小于等于父类的异常

子类和父类重名的成员变量:
父类 a = new 子类 b;
a.属性 展示父类的属性值
子类 a = new 子类 b;
a.属性 展示子类的属性值

父类 a = new 子类 b;
a.方法  a能点出什么看父类的成员变量和方法,如果方法被重写,显示子类的方法行为

在子类初始化的时候首先在子类的构造方法中隐含了调用父类构造方法supper(..),父类先初始化,如果子类发生和父类重名的变量则会在内存中生成一份父类的变量,并不冲突.

2.封装

变量私有化方法公开化
一般用在javabean中提供getter和setter方法
一般不希望对外公布调用的方法
单例模式就不希望对外公布构造方法,私有化构造方法,提供静态的方法去调用和暴露.

3.多态

为了改变单继承,java提供了多实现的概念 interface和implements
interface接口中只能包含常量和public方法,省略了方法的修饰符默认public修饰
接口可以实现多继承用extends,实现该接口的类一定要实现所有的方法.

类中的属性是没有多态性的
向上转型,向下转型 父类指向子类

抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化。

java的内存空间分为四类:栈(stack)、堆(heap)、代码(code)、静态数据(data)

多态实际上是一种机制,在编译时刻,会生成一张虚拟表,来记录所有覆盖的方法,没有被覆盖的方法是不会记录到这张表的.若一个父类引用调用了没有覆盖的子类方法,那么是不符合该表的,那么编译时刻就会报错. 在执行程序的时候,虚拟机会去这张虚拟表中找覆盖的方法,比如引用中实际上存的是一个子类对象引用,那么就会去找子类中的相应的覆盖的方法来执行

面向接口编程,接口实际上就代表一个实现的对象,就是一个接口的实现类完完全全可以代表接口所有的功能.

猜你喜欢

转载自blog.csdn.net/qq125281823/article/details/92389227