黑马程序员-面向对象的基础1

来源:互联网 发布:kali linux 使用教程 编辑:程序博客网 时间:2024/06/05 16:27

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

一、类与对象

面向对象:三个特征:封装,继承,多态;
以后开发:其实就是找对象使用,没有对象就创建对象。
找对象,建立对象,使用对象,维护对象。
类和对象的关系
类就是:对现实生活中事物的描述;
对象:就是这类事物:实实在在存在的个体。
二、封装private

private:私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)。
私有只在本类中有效。
将AGE私有化以后,类以为即使建立了对象也不恩能够直接访问了
但是人英爱有年龄。就需要在person类中提供对应的访问age的方式。
注意:私有仅仅是封装的一种表现形式。
之所以对外提供访问方式,就是因为可以在方法为方式中加入逻辑判断等语句。
对访问的数据进行操作,提高代码的健壮性。
封装:
好处;1 将变化隔离 2 便于使用 3 提高重用性 4提高安全性。
原则:1、将不需要对外提供的内容都隐藏起来
2、把属性都隐藏,提供公共方法对其访问

三、构造函数

特点:1函数名与类名相同,2不用定义返回值类型。3不可以写return语句
作用:给对象进行初始化
注意:
1 默认构造函数特点
2多个构造函数式以重载方式存在的,
对象以建立就会调用与之对应的构造函数。
构造函数的作用:可以用于给对象进行初始化、
构造函数的小细节:
单一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构成函数。当在类中自定义了构造函数后,默认的构造函数就没有了,构造函数和一般函数在写法上有不同、在运行上也有不同、构造函数时在对象一建立就运行,给对象初始化、一般方法是对象调用才执行,给是对象谈价对象具备的功能、
一个对象建立,构造函数只运行一次。 而一般方法可以被该对象调用多次。

四、静态static

什么时候用静态?要从两方面下手:因为静态修饰的内同有成员变量和函数.
什么时候定义静态的变量(类变量)呢?
当对象中出现共享数据时,该数据被静态所修饰。对象中的特有数据要定义成非静态存在于堆内存中。
什么时候定义静态函数呢?
当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。

静态的应用

每一个应用程序中都有共性功能。可以将这些功能进行抽取,独立封装。以便复用。
虽然可以通过建立对象使用这些工具方法,对数组进行操作。
发现了问题:
1、对象时用于封装数据的,可是ArrayTool对象并未封装特有数据、
2.操作数据的没一个方法都没有用到ArrayTool对象中的特有数据。
这时就考虑,让程序更严谨。是不要对象的、可以将ArrayTool中的方法都定义成static的,直接通过类名调用即可。将方法都静态后,方便于使用,但是该类还是可以被其他程序建立对象的。为了更为严谨,强制让该类建立对象。可以通过将构造函数私有化完成。

五、继承extends 

1.提高了代码的复用性2,让类与类之间产生了关系,有了这个关系,才有了多态的特性。
注意:千万不要为了获取其他类的功能,简化代码而继承、必须是类与类之间有所属关系才可以继承。
Java之支持单继承,不支持多继承。因为多继承容易带来安全隐患;当多个父类中定义了相同功能时。子类对象不确定要运行哪一个但是java保留这种机制。并用另一种体现形式来完成表示。多实现。
java支持 多层继承。也就是一个继承体系。
如何使用一个继承体系中的功能呢?

想要使用体系,先查阅体系父类的描述。因为父类中定义的是体系中的共性内容、通过了解共性功能,就可以知道该体系的基本功能那么着个体系就 可以基本使用了 。

那么在具体调用时,要创建最子类的对象,为什么?
1,是以为有可能父类不能创建对象2.创建子类对象可以使用更多的功能,包括基本,也包括特有的。

简单一句话,查阅父类功能,创建子类对象使用功能。

六、子父类

子父类出现后,类成员的特点。
类中成员:
1变量、2、函数3、构造函数。
1.变量
如果子类中出现非私有的同名成员变量时,子类要访问本类的变量用this,子类要访问父类中的同名变量;用super
2.子父类中的函数
当子类出现和父类一模一样的函数时;如同父类的函数被覆盖一样;这种情况是函数的领一个特性: 重写(覆盖)
当子类继承父类:沿袭了父类的功能到子类中但是子类虽具备该功能的内同却和父类不一致、这时,没有必要定义新功能,而是使用覆盖的特殊保留父类的功能定义,并重写功能内容。
覆盖:
子类覆盖父类,必须保证子类权限大于等于父类权限,否则编译失败。静态只能覆盖静态。
记住:
重载:只看同名函数的参数列表。重写:子父类方法要一模一样。
3.子类中的构造函数、
在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行隐试的语句super(),super():会访问父类中的空参数。而且子类中所有的构造函数默认第一行都是super()。
为什么子类一定要访问父类中的构造函数。
因为父类中的数据子类可以直接获取,所以子类对象在建立时。需要先查看父类是如何对这些数据是如果初始化的,要先访问父类中的构造函数、如果要访问父类中指定的构造函数,可以通过手动的定义SUPER语句来指定。
super调用:
一般函数:super.函数名。构造函数:spuer(函数名)
注意:super语句一定定义在子类构造函数的第一行。
结论:
子类所有的构造函数,默认都会访问父类中的空参数的构造函数、因为每一个子类构造函数都有一句隐身的super()。当父类中没有空参数的构造函数时,子类必须通过super语句来指定访问父类构造函数。当然: 子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数。子类至少
会有一个构造函数会访问父类中的构造函数。 




0 0
原创粉丝点击