黑马程序员—面向对象(基础)

                                       -------android培训java培训、期待与您交流! ----------

1.类和对象的关系
类就是:对现实生活中事物的描述;
对象:就是这类事物,实实在在存在的个体;

2.匿名对象
使用方式一:当对对象的方法只调用一次时,可以用匿名对象来完成;这样写比较简化,可是对一个对象进行多个成员调用,必须给对象起一个名字。

使用方式二:可以将匿名对象作为实际参数进行传递;

3.封装
(1).定义:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
(2).好处:将变化隔离、便于使用、提高重用性、提高安全性
(3).封装原则:a.将不需要对外提供的内容都隐藏起来。   b.把属性都隐藏起来,提供公共方法对其访问。

私有仅仅是封装的一种表现形式。

4.构造函数
(1).作用:可以用于给对象进行初始化。
(2).当分析事务时,该事务存在一些特性或者行为,那么将这些内容定义在构造函数中。

5.构造代码块
(1).作用:给对象进行初始化(对象一建立就运行,而且优先于构造函数执行。多个对象建立,要执行多次)。
(2).与构造函数的区别:构造代码块是对所有对象进行初始化,而构造函数是给对应的对象进行初始化。
(3).构造代码快中定义的是不同对象共性的初始化内容。
(4).如果是静态构造代码块,则在类加载的时候执行一次,优先于其他两个。

6.this、super关键字
(1).哪个对象在调用this所在的函数,this就代表那个对象。
(2).this应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
(3).可以用于构造函数之间的调用(一个构造函数调用另一个构造函数的时候),放在构造函数中的第一行。this语句不能用于其他函数中,只能用于构造函数中。
(4).this和super不能同时出现在同一个构造函数中,因为两者都要出现在首行,导致相冲突。

7.成员变量和类变量的区别
(1).存放位置不同:类变量随着类的加载而存在于方法区中。实例变量随着对象的建立而存在对内存区中。
(2).生命周期不同:类变量生命周期最长,随着类的消失而消失。实例变量生命周期随着对象消失而消失。

8.静态使用注意事项
(1).静态方法不可以访问非静态成员;反过来,非静态方法可以访问静态成员也可访问非静态成员。
(2).静态方法中不可以定义this和super关键字,因为静态优先于对象存在,而this和super都是指向对象的。
(3).静态函数的使用:当函数中的内容与成员变量无关的时候,可以用static修饰函数。

9.初始化过程
Person p = new Person("zhangsan", 20); 这句话做了什么?
(1).因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。
(2).执行该类中static代码块,如果有的话,给Person.class类进行初始化。
(3).在堆内存中开辟空间,分配内存地址。
(4).在堆内存中建立对象的特有属性,并进行默认初始化。
(5).对属性进行显示初始化。
(6).对对象进行构造代码块初始化。
(7).对对象进行对应的构造函数初始化。
(8).将内存地址赋值给栈内存中的p变量。

10.方法重写与重载
“两同两小一大”:
(1). 方法名相同、形参列表相同
(2).子类方法返回值类型应比父类方法返回值类型更小或相等。
(3).子类方法声明抛出的异常类应比父类的更小或相等。
(4).子类方法的访问权限应比父类方法更大或相等。
(5).覆盖方法要么都是类方法,要么都是实例方法,不然出错。

方法重载:只看同名函数的参数列表。

11.子父类的构造函数
在对子类的构造函数进行初始化时,父类的构造函数也会运行。因为在子类的构造函数第一行,有一条隐示的语句:super()。

为什么子类一定要访问父类中的构造函数?
     因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的。所以子类在对象初始化时,要先访问父类的构造函数。如果要访问父类中的特定的构造函数,则要在子类第一行中显示的调用super()方法。

12.final关键字
(1).既可以修饰类,也可以修饰函数和变量。
(2).被final修饰的类不能被继承。
(3).被final修饰的方法不能被重写,可以重载。
(4).被final修饰的变量是一个常量并且只能赋值一次,既可以修饰成员变量,也可以修饰局部变量。
(5).内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。

13.抽象类
(1).抽象方法一定在抽象类中。
(2).抽象方法和抽象类都必须被abstract关键字修饰。
(3).抽象类不能用new创建对象。
(4).抽象类中的方法要被使用,必须由子类重写抽象方法;如果只是重写了部分方法,则子类还是抽象方法。
(5).抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。

14.接口
(1). 接口里的方法都是抽象方法,属性都是常量(static修饰),且不能包含构造器和初始化块定义;
(2).接口中的修饰符都是public;
(3).可以被类多实现;
(4).类与类之间是单继承,但接口与接口之间可以实现多重继承;

注:基本功能定义在类中,扩展功能定义在接口当中。

15.多态
(1).多态可以理解为事物存在的多种体现形态。
(2).多态的体现:父类的引用指向了自己子类的对象。父类的引用也可以接收自己的子类对象。
(3).多态的好处:大大的提高了程序的扩展性。
(4).多态的前提:必须是类与类之间有关系,要么是继承,要么是实现。此外必须存在方法重写。
(5).多态的弊端:提高了扩展性,但是只能使用父类的引用访问父类中的成员
(6).多态自始自终都是子类在做着变化。
(7).多态中(非静态)成员函数的特点:a.在编译时期,参阅引用型变量所属的类中是否有调用的方法。有就编译通过,否则失败。                                                                  b.在运行时期,参阅对象所属的类中是否有调用的方法。
(8).总结:成员函数在多态调用时,编译看左边,运行看右边。

多态中静态函数的特点:无论编译和运行,都看它的左边。
接口也可以使用多态。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值