面向对象总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Private私有化:

一般的话只对外提供几个功能的话,会把具体实现的过程给封装起来,这样可

可以不让外界随意改动代码,如果私有化成员属性的话,要对外提供两人个方法set get ,因为属性是不能有逻辑判断的,只是容器,用来放东西的,但如果放入的东西不符合规范就会出错,所以要私有化成员属性,再用set 和get,函数里面可以进行逻辑判断,可以规定属性的范围,这样不容易出来安全隐患。

构造函数:

只要是类,都会有构造函数的。如果自己没有写,就是系统默认生成的,但如果自己写了构造函数,那系统就不会生成了。构造函数是可以被重载的,也就是可以定义多个构造函数,只要类型不一样或者个数不同就可以了。一般可以用来给成员变量初始化的,所以没有返回值和返回类型,如果事物有需要了,可以定义多个构造函数,对方调用哪个,就给哪个初始化,可以让对方选择。构造函数和一般函数不一样的是,一创建新的类就会运行构造函数了,但只运行一次,一般的函数你不调用他是不会运行的,也可以运行多次。

代码块:

代码块比构造函数还要先执行,也执行一次,代码块只要是类中的对象都会初始化,而构造函数是针对的调用他的对象。类中的话运行顺序是:成员变量——》代码块——》构造函数

程序运行的顺序:

main()

{

Person p = new Person();

}

创建一个对象都在内存中做了什么事情?

1,先讲硬盘上指定位置的Person.class文件加载进内存。

2,执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈)

然后在main方法的栈区分配了一个变量p。

3,在堆内存中开辟一个实体空间,分配了一个内存首地址值。

4,在该实体空间中进行属性的空间分配,并进行了默认初始化。

5,对空间中的属性进行显示初始化。

6,进行实体的构造代码块初始化。

7,调用该实体对应的构造函数,进行构造函数初始化。

8,将首地址赋值给p。p变量就引用了该实体。(指向了该对象)

构造函数有没有return语句?

构造函数中没有void也没有返回值类型,所以是没有return语句的,但是如果加个判断,条件成立就用return返回,这样做是可以的。

单例模式:

就是为了保证所需要的值在内存中的唯一性。一般是内部创建方法,对外提供方法,禁止外部直接访问。

一般是可以用两种,懒汉式和饿汉式,一般是三个步骤:

1,给构造函数私有化,禁止外部对其直接访问。

2,在内部new一个对象,私有化并静态

3,对外提供一个静态的方法让其访问栈内存中的地址,可以让其唯一性,静态是方法直接以类名.方法的形式让外界调用函数,因为new是不行的,外界不能访问的

4,懒汉式是在new对象的时候,赋值为null,在方法中判断如果是空就赋值

调用方法有几种?

1,用new的方法,创建对象来使用方法

2,如果方法是静态的,可以用类名.方法来调用此函数的方法

3,如果方法没有调用其它的变量或者函数,只是方法内部定义功能的话,可以把该功能定义为static,这样不管是静态还是非静态都可以调用此功能,如果是别的类,就不用new 对象也可以调用了;static变量是这个类中所有方法一种共性的抽取,只要是类中的方法都可以调用这个变量。

代码块:

1,静态代码块:随着类的加载而加载的,代码块比成员变量和静态变量都还要先运行2,构造函数代码块:比构造函数先运行的

3,运行的顺序是:静态代码块——》静态变量——》成员变量——》构造代码块——》构造函数

用new和类名.方法的区别?

方法如果不调用外界的特有数据,就可以加静态,这样调用就可以直接用类名调用了,这样不用再在堆内存中走一遍了。New的话什么都可以创建包括静态的,不过都要在堆内存中创建对象,不管用不用得到,所以如果有静态可以不new省内存空间。

This的用法以及该什么时候使用?

This(构造函数) this代表哪个对象在使用它,它就代表哪个对象,也可以用在构造函数上面,但是要放在第一排,一般是一个构造函数引用另一个构造函数时可以用到,在一个构造函数里面,这样的引用只能使用一次。

一般是要用到本类中的变量或者方法的时候可以加入this,这样可以不起到冲突,指的永远都本类方法中的变量。

什么时候用覆盖?

当一个类的功能要修改时,可以用覆盖操作

抽象类的细节:

1,抽象类可以有构造函数,用来给子类函数初始化用的

2,抽象类中可以定义非抽象的方法,抽象类和普通的类差不多,区别主要是比普通类多了一个抽象的功能,少了一个方法主体。

3,抽象关键字不能用private static final共同存在,static:抽象类没有方法主体不能被静态直接调用;final:如果定义为了最终值的话,抽象类不能被子类实现了;private:抽象是不能被访问的。

4,抽象类中也可以不定义抽象方法,就是为了不让外界创建对象。

5,Final:如果一个类的话只是默认初始化的话,是可以赋值的,赋完了就不能动了,如果不是默认初始化已经赋值过了,或者XX初始化过了就不能再动了

继承关于覆盖:

如果父类和子类都定义了相同的属性,调用子类的话,默认是用子类的属性,如果想要调用父类的属性就必须用super(),与this()的用法相近,super只用于继承中的,this的话可以调用本类中的属性。在内存中父类的属性还是存在的,只不过调用了子类的,我们形象的说是子类把父类覆盖掉了,一般很少出现父类和子类的属性相同,可以直接调用父类的。

This()和super()区别?

两个都是访问构造函数的,都是放在构造函数的第一行,所以两个不能同时出现在同一个构造函数中,super()只要是构造函数第一行默认都会有的,但当定义了this()时不会出现了,但是还是会调用父类的构造函数,因为this()调用的构造函数第一行默认还是super()所以还是会去访问父类的构造函数。

覆盖的注意事项:

1,子类要覆盖父类的时候,访问的权限不能小于父类。

2,覆盖的时候如果一方是静态,另外一方也必须是静态的。

Private和set,get方法的应用及作用域

一般类的属性都会加上private,然后根据具体的需求,设定调用都是否需要更改值或者只调用值,一般定义类都是对外提供方法,但具体的实现步骤是不需要对外公布的所以加私有化。如果父类中定义了private属性,子类不能直接访问,只能间接访问。

抽象类与接口的区别?

1,抽象类与普通的类差不多,只能被单继承,接口一定需要实现,支持多实现

2,抽象类可以继承接口

用法:接口可以对外定义一个规则,让程序按照指定的规则来实现接口,内部只要调用接口的方法就可以;抽象类是子类很多都有具体的实现方法,要定义抽象,如果是具体的公共部分则不需要,子类拿来用就行了。

相关文档
最新文档