黑马程序员技术交流社区
标题:
刚总结的面向对象三大特性,请指点,发现错误告知,谢谢
[打印本页]
作者:
double[K]
时间:
2016-11-17 22:23
标题:
刚总结的面向对象三大特性,请指点,发现错误告知,谢谢
面向对象
(世间万物皆对象)——
1.面向过程与面向对象的区别:
遇到问题,面向过程想的是自己怎么解决;而面向对象想的是我该找谁来帮我解决问题,找不到就自己创造一个人来帮自己解决;
2.面向对象的好处:
1.符合人类的思维习惯;
2.相比面向过程强调的是执行者的作用,而面向对象强调的是指挥者的作用;
3.能将复杂的问题简单化;
3.类与对象的定义以及关系
1.类——是对现实生活中某一事物的描述;而事物又具有相应的属性和功能;对应的在类中将属性称为类的成员变量,功能称为成员方法;
2.对象是类的实例化
3.通过对象调用类的方法(功能);
4.成员变量与局部变量的区别
1.定义位置不同:成员变量定义在类中方法外;局部变量定义在方法内或语句中;
2.作用域不同:成员变量整个类;局部变量方法内或语句内;
3.默认值不同:成员变量不初始化,有默认值;而局部变量使用前必须初始化,无默认值;
4.内存位置不同:成员变量堆内存;局部变量栈内存;
5.生命周期不同:成员变量整个类结束时死亡;局部变量在所在方法结束或所在语句结束时立马死亡;
5.写main方法的类叫做测试类;
封装
——(针对的是一个类,对一种事物的封装)
1.封装好处:提高了代码的安全性和复用性;
2.private(权限修饰符):成员修饰符,私有,被修饰的成员变量只能在本类中(直接)使用;所以被private修饰后,得提供相应的公共访问的方式(方法)即方法;get/set方法
3.相比没有private修饰时,人们在测试类中用类的对象直接(对象.变量名)就可以使用, 这样就可以随意更改成员变量的值,若值违背现实情况,也没有提示报错,具有安全隐患;所以用private修饰后,代码的安全性提高了,测试类中想调用成员变量只能通过set/get方法赋值取值;而在set/get方法中我们可以对所要赋的值进行限定,这就是安全性提高的原因;
4.在类中,当成员变量与局部变量重名时,使用遵循“就近原则”
5.this——
1.区分成员变量和局部变量;
2.在测试类中,类的哪个对象调用自定义类中的成员方法,则成员方法中的this关键字就代表这个对象;
6.private仅是封装的一种体现形式;
继承
——(针对多个有关系的类,是类之间的一种关系,使类联系紧密)/extends
1.继承好处:
1.复用性
2.多态的前提
2.继承:父类,子类;子类可以自动拥有父类非私有的成员;
3.注意:
1.只能单继承,不能多继承
2.一个父类可以拥有多个子类;
3.java支持多重继承;
4.继承体系:
根源:子类共性抽取,形成父类;
父类越往上越抽象;子类最具体,不但有共性,还有自己的特性;
5.子类对象调用成员
1.子类自己有的,就直接调用自己的;
2.子类没有的就调用父类的;
6.super:当子类与父类出现同名变量时,用super关键字区分
super调用父类成员;this调用本类成员;
7.重写(是对父类功能的扩展)
在继承中,重写,子类重写父类的方法;除了父类方法中的功能外,还可以添加新的功能;
注意:重写时子类权限>=父类方法权限,其他一样
权限:public>protected>default(默认)>private
8.default:不写表示默认,写了编译出错;
9.抽象类:abstract
1.抽象类是子类共性抽取形成的,抽象类中的抽象方法不知道具体执行功能,所以没有方法体;
2.抽象类/抽象方法都用abstract修饰;
3.抽象类中可以没有抽象方法,但有抽象方法的类一定是抽象类
4.抽象类不能创建对象;强制子类继承
abstract与private/final/static不能共存;
5.抽象类强制要求子类重写父类方法(重写扩展功能,保障程序功能的完整性);
6.子类必须全部重写父类中的抽象方法,然后才能创建对象;若指重写一部分,子类还是一个抽象类;
7.继承关系存在,则子类在创建对象的同时,系统默认为父类创建对象;
接口
——(接口类似抽象类但 接口!=抽象类)(世间万物都用功能,即世间万物都有接口)
1.接口是功能的集合;
2.接口中方法全部抽象方法,只描述具备的方法,不具体实现;
3.定义; interface 类比 class
4.成员方法定义固定格式;
public abstract 返回值类型 方法名(参数列表);
public 写不写都可以,不写也代表public;
5.成员变量定义;
public static final 数据类型 变量名=值;
常量,固定值,不可更改;
6.自定义实现类(实现)接口的功能;创建实现类对象;
7.接口成员变量定义的特点:public static fianl 修饰符写不写都存在;
成员方法定义特点:public abstract 写与不写都存在;
8.实现类重写接口中的一部分方法,则实现类是抽象类;
9.接口可以多实现(implements)——不存在安全隐患
类的多继承 存在安全隐患是因为,抽象类中有非抽象的方法,如果两个抽象方法中有同名的非抽象方法,子类重写不能确定(成员变量)(成员方法)重写哪一个,出现安全隐患;
接口的多继承 不存在安全隐患是因为,接口中全部都为抽象方法,没有具体的方法体,接口功能的实现依赖于子类的重写,所以即使多个接口中有同名的方法,也不会出现安全隐患;
10.多实现时应避免两个接口中存在返回值类型不同、方法名相同、参数列表相同的情况;因为在实现类重写接口方法时,实现类中将会出现同名方法,编译出错;
11. 多实现弥补了单继承的缺陷;
12.—— 类与类 单继承
接口与接口 多继承
类与接口 多实现
13.(面试)java中有多继承吗?
类只有单继承;接口与接口间存在多继承;
14.接口思想:
符合规则,降低耦合,扩展功能
15.优先使用接口,次选抽象类
多态
——
1.多态——父类引用变量指向子类对象;(向上转型)
2.三种形式——
普通类;
抽象类;
接口;
3.多态两大转型
1.向上转型(调用子父类共有的方法):子类转为父类,由小转大,多态的常规写法,在父类引用变量调用成员变量时,编译时看父类,运行时还看父类; 调用成员方法时,编译看父类,运行看子类(因为继承导致多态,父类中的方法都被子类重写了,而且功能更加完善;所以运行时看子类)
2.向下强转(调用子类特有的方法)
4.instanceof 关键字——用来判断某个对象是否属于某种数据类型
demo:
一个方法返回值类型是父类Animal,则在方法中返回一个子类对象;而方法外的人并不知次方法的具体实现细节,所以只知道调用此方法返回的是一个动物Aniaml类的对象,不知道具体是什么动物,此时就需要 instanceof来判断;
5.@override 标志标识“这是一个重写的方法”;
作者:
duanqichao
时间:
2016-11-19 01:06
private仅是封装的一种体现形式?这话不明白啥意……
作者:
double[K]
时间:
2016-11-19 01:09
duanqichao 发表于 2016-11-19 01:06
private仅是封装的一种体现形式?这话不明白啥意……
从封装的作用来说,封装就是提高了代码的安全性和复用性,而private私有化成员,就是起到这么一个作用,所以说private是封装的一种体现形式
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2