黑马程序员_面向对象的三个基本特征

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


面向对象—封装:

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

封装的好处:

1,将内部实行过程隔离;

2,方便于使用;

3,提高代码重用性;

4,提高安全性。

封装原则:

将不需要对外提供的内容都隐藏起来,提供公共的方法对其进行访问。

private:关键字

用于修饰成员变量和成员方法,被修饰的内容在其它类中是不可以被访问的。

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

面向对象—继承:

概述:

1,Java语言中只支持单继承,不支持多继承。

即是一个子类只能有一个父类,不允许有多个,容易有安全隐患。

(1)、比如,同时继承两个类,两个类中有同名函数。

(2)、但是Java保留了这种机制,并用另一种体现形式来完成表示,叫做多实现。

(3)、Java支持多层继承,也就是一个继承体系,B继承A,C继承B,这样C就既有了A的功能,又有了B的功能,这就是多继承。

2,使用一个继承体系功能。

(1)、要想使用体系,先查阅体系父类的描述,因为父类中,定义的是该体系中共性的功能。

(2)、通过了解共性功能,就可以知道该体系的基本功能。

3,在具体调用时,创建子类对象还是父类对象?

(1)、创建子类对象可以使用更多功能,包括基本的也包括子类特有的。

(2)、有可能父类不能创建对象。所以查阅父类功能,创建子类对象使用功能。

继承的好处:

1,提高了代码的复用性。

2,让类与类之间产生了关系。有了这个关系,才有了多态的特性。

主要事项:

1,千万不要为了获取其他类的功能,简化代码而继承。

2,类与类之间不只有继承关系,也有聚集(包括聚合和组合)关系。

(1)、聚合:球队由球员组成,球员是球队中的一个,球队中有球员。

(2)、组合:比聚合更紧密,心脏和身体的关系,不可分割。

子父类中变量的特点:

如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量用this;

要访问父类中的同名变量,用super;

super和this的使用基本一致,this代表本类对象的引用,super代表的是父类对象的引用。

子父类中函数的特点:

1,当子类出现和父类一模一样的函数时,当子类对象调用该函数,会运行子类函数的内容,如同父类的函数被覆盖一样,这种情况是函数的另一个特性:重写(覆盖)。

2,当子类继承父类,沿袭了父类的功能到子类中,但是子类虽具备该功能,但是功能的内容却和父类不一致,这时,没有必要定义新功能,而是使用覆盖,保留父类的功能定义,并重写功能内容。

3,子类覆盖父类,必须保证子类权限大于等于父类,才可以覆盖,否则编译失败。静态只能覆盖静态。

4,重载只看同名函数的参数列表;重写子父类方法要一模一样。

子父类中构造函数的特点:

1,在对子类对象进行初始化时,父类的构造函数也会运行。因为子类的构造函数默认第一行有一条隐式的语句super();

super()会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super();

2,子类一定要访问父类中的构造函数,因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的,

所以子类在对象初始化时 ,要先访问一下父类中的构造函数,如果要访问父类中指定的构造函数,可以通过手动定义super()语句的方式来指定。

3,super()语句一定要定义在子类构造函数的第一行。

继承的弊端:

打破了封装性。

面向对象—多态:

概述:某一类事物的多种存在的多种形态。

1,多态的体现

父类的引用指向了自己的子类对象。

父类的引用也可以接收自己的子类对象。

2,多态的前提

必须是类与类之间有关系。要么继承,要么实现。

通常还有一个前提:存在覆盖。

3,多态的好处

多态的出现大大的提高程序的扩展性。

4,多态的弊端

提高了扩展性,但是只能使用父类的引用访问父类中的成员。

多态的注意事项:

1,成员变量

编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败。

运行时:参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量。

总的来说:编译和运行时都参考等号左边。

2,成员函数(非静态)

编译时:参考引用型变量所属的类中的是否有调用的函数。有,编译通过,没有,编译失败。

运行时:参考的是对象所属的类中是否有调用的函数。

总的来说:编译时看左边,运行是看右边,因为成员函数存在覆盖性。

3,静态函数

编译时:参考引用型变量所属的类中的是否有调用的静态方法。

运行时:参考引用型变量所属的类中的是否有调用的静态方法。

其实对于静态方法,是不需要对象的。直接用类名调用即可。

总的来说:编译和运行都看左边。

总结:非静态成员函数,编译时看左边,运行时看右边。其他都看左边。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值