黑马程序员_面向对象知识总结

来源:互联网 发布:统计分析 数据挖掘 编辑:程序博客网 时间:2024/06/07 04:38


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

❶继承
①提高了代码的复用性。
②让类与类之间产生了关系,有了这个关系,才有了多态的特性,必须是类与类之间有所属关系才可以继承

③为什么Java语言中支持单继承,不支持多继承

因为多继承容易带来安全隐患:当多个父类中定义了相同功能,当功能内容不同时,子类对象不确定要运行哪一个
但是java保留这种机制,并用另一种体现形式来完成表示:多实现。

④java支持多层继承

❷如何使用一个继承体系中的功能呢

想要使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中共性功能,通过了解共性功能,就可以知道该体系的基本功能,那么这个体系已经可以基本使用了。
❸在具体调用时,为什么要创建子类的对象
一是因为有可能父类不能创建对象

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

总的说来就是:查阅父类功能,创建子类对象使用功能

❹子父类中变量的特点

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

子类要访问父类中的同名变量用super,this代表的是本类对象的引用,super代表的是父类对象的引用。

❺覆盖的理解

子父类中的函数,当子类出现和父类一模一样的函数时,
当子类对象调用该函数,会运行子类函数的内容,
如同父类的函数被覆盖一样。

❻覆盖引出的新功能:重写

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

❼需要注意的

①子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败
②静态只能覆盖静态
③重载:只看同名函数的参数列表
④重写:子父类方法要一模一样

❽子父类中的构造函数

①为什么在对子类对象进行初始化时,父类的构造函数也会运行
那是因为子类的构造函数默认第一行有一条隐式的语句 super(),
super():会访问父类中空参数的构造函数,
而且子类中所有的构造函数默认第一行都是super()。

②为什么子类一定要访问父类中的构造函数

因为父类中的数据子类可以直接获,所以子类对象在建立时,
需要先查看父类是如何对这些数据进行初始化的。
所以子类在对象初始化时,要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定

❾final 关键字
①可以修饰类,函数,变量。
②被final修饰的类不可以被继承。为了避免被继承,被子类复写功能。
③被final修饰的方法不可以被复写。
④被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,也可以修饰局部变量。
⑤final使用场景
当在描述事物时一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字方便于阅读。而这个值不需要改变,所以加上final修饰

⑥内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量

❿抽象类及其特点
①抽象方法一定在抽象类中。
②抽象方法和抽象类都必须被abstract关键字修饰。
③抽象类不可以用new创建对象。因为调用抽象方法没意义。
④抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用。
⑤如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

模版方法的理解
在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定的部分在使用不确定的部分,
那么这时就将不确定的部分暴露出去。由该类的子类去完成。
通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序。但是某

些步骤的具体实现是未知的,或者说某些步骤的实现与具体的环境相关。

多态:事物存在的多种体现形态
①多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
②多态的前提
必须是类与类之间有关系,要么继承要么实现,
通常还有一个前提:存在覆盖。
③多态的好处
多态的出现大大的提高程序的扩展性。
④多态的弊端
虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。

⑤类型转换

向上转型Animal a = new Cat(); 

向下转型Cat c = (Cat)a;

多态里面的特点

①在多态中成员函数的特点
成员函数在多态调用时,编译看左边,运行看右边。
②在多态中,成员变量的特点
无论编译和运行,都参考左边(引用型变量所属的类)。
③在多态中,静态成员函数的特点
无论编译和运行,都参考做左边。

接口和多态实现程序的可扩展性(伪代码)

interface UserInfoDao{ public void add(User user); public void delete(User user);}class UserInfoByJDBC implements UserInofDao{  public void add(User user)  {   1,JDBC连接数据库。;   2,使用sql添加语句添加数据。;   3,关闭连接。  }  public void delete(User user)  {   1,JDBC连接数据库。;   2,使用sql添加语句删除数据。;   3,关闭连接。  }}class UserInfoByHibernate implements UserInfoDao{  public void add(User user)   {    1,Hibernate连接数据库。;    2,使用sql添加语句添加数据。;    3,关闭连接。   }  public void delete(User user)   {    1,Hibernate连接数据库。;    2,使用sql添加语句删除数据。;    3,关闭连接。   }}class  DBOperate{  public static void main(String[] args)   {    UserInfoByJDBC ui = new UserInfoByJDBC();    UserInfoByHibernate ui = new UserInfoByHibernate();    UserInfoDao ui = new UserInfoByHibernate();    ui.add(user);    ui.delete(user);  }}

以上代码就很好的实现了程序的可扩展性,以后要修改功能的时候只需修改一处而不需修改所有

最后总结使用面向对象思想开发的优点
①易维护
采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,
那么维护也只是在局部模块,所以维护起来是非常方便和较低成本。
②质量高
在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满
足业务需求并具有较高的质量。
③效率高
在软件开发时,根据设计的需要对现实世界的事物进行抽象产生类,
使用这样的方法解决问题,接近于日常生活和自然的思考方式,
必定提高了软件开发的效率和质量。
④易扩展
由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,
使得系统更灵活、更容易扩展


----------------------------------------- android培训java培训、java学习型技术博客、期待与您交流! --------------------------


详情请查看:http://edu.csdn.net/heima










0 0
原创粉丝点击