黑马程序员技术交流社区

标题: 学完继承,参考些资料总结下,希望版主给点技术..... [打印本页]

作者: 空灵    时间: 2014-11-19 23:50
标题: 学完继承,参考些资料总结下,希望版主给点技术.....
继承

继承概述:将学生和工人的共性描述提取出来,单独进行描述。只要让学生和工人与单独描述的这个类有关系就可以了。
继承特点:提高了代码的复用性。让类与类之间产生了关系,有了这个关系,才有了多态的特性。

java语言中,只支持单继承,不支持多继承,因为多继承容易带来安全隐患。

当多个父类中定义了相同功能,当功能内容不同时,子类对象不不确定运行哪一个。
但是java保留了这种机制,并用另一种体现形式来完成表示,叫多实现。

java支持多层继承。也就是一个继承体系。
如:儿子继承爸爸,爸爸继承爷爷,儿子拥有爷爷的东西,也拥有爸爸的东西

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

二、子父类中的变量

类中的成员:变量、函数、构造函数,果子类中出现非私有的同名成员变量时,
子类要访问本类中的变量,用this,
子类要访问父类中的同名变量,用super。

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

三、子父类中函数的特点

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

这种情况是函数的另一个特性:重写(覆盖)

复写:
1、子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。
2、静态只能覆盖静态。不能覆盖非静态。

已学的权限有几种:
1、private 私有
2、public 公共
3、默认权限

注意:
重载:只看同名函数的参数列表。
重写:子父类方法要一模一样。包括返回值类型


四、子父类中变量的特点

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

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

只有子类才有super();
构造函数里面只能有一个隐式语句,如果有了super();,就不能在有this();

结论:
子类的所有构造函数,默认都会访问父类中空参数的构造函数。
因为子类每一个构造函数的第一行都有一句隐式super();

当父类中没有空参数的构造函数时,子类必须手动通过super或者this语句形式来指定要
访问父类中的构造函数。当然,子类的构造函数第一行也可以手动指定this语句来访问本
类中的构造函数。子类中至少会有一个构造函数会访问父类中的构造函数。

五、final关键字

final:最终,是一个修饰符,
1、可以修饰类、函数、变量。
2、被final修饰的类不可以被继承。为了避免被继承,被子类复写功能。(如01)
3、被final修饰的方法不可以被复写。(如02)
4、被final修饰的变量是一个常量,只能赋值一次,既可以修饰成员变量,又可以修饰局部变量。(如03)
当在描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,
    都给这些值起个名字,方便阅读。而这个值不需要改变,所以加上final修饰。
作为常量:常量的书写规范所有字母都大写,如果有多个单词组成,单词之间用_连接
5、内部类定义在类中的局部位置上是,只能访问该局部被final修饰的局部变量。

六、抽象类 abstract

当多个类中出现相同功能,但是功能主体不同,
这时可以进行向上提取。只抽取功能定义,而不抽取功能主体。

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

区别:抽象类比一般类多了抽象函数,就是在类中可以定义抽象方法,抽象类不可以实例化。
特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。

总结:
抽象类不能被创建对象,只能由子类创建对象复写其所有的抽象方法,
抽象类的方法必须是抽象方法,但抽象类可以不定义方法,
当抽象类中没有定义方法时,子类可以创建任意方法。

七、模版方法模式

需求:获取程序运行的时间。
原理:获取程序开始和结尾的时间并相减即可。

获取当前时间的毫秒值:System.currentTimeMillis();

当代码完成优化后,就可以解决这类问题,这种方式叫模板方法设计模式。

什么是模板方法呢?
在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定的部分在
使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成。

八、接口的特点

接口是对外暴露的规则。
接口是程序的功能扩展。
接口可以用来多实现。
类与接口之间是实现关系,而类可以继承一个类的同时实现多个接口。
接口与接口之间可以有继承关系,而且可以多继承。




作者: 空灵    时间: 2014-11-20 00:06
打字扒资料累死了,版主就给一个技术分啊,菜鸟没前途啊:'(
作者: 杨佳名    时间: 2014-11-20 00:20
空灵 发表于 2014-11-20 00:06
打字扒资料累死了,版主就给一个技术分啊,菜鸟没前途啊

总结的很不错,必须给赞一个!但相信你所收获东西,远比这一个技术分所含的分量重得多。
说实话,看到标题就不想给加分了,但确实是总结的很认真。学到东西才是自己的,不要为了技术分而发帖。相信只要态度有了,技术分自然就会有的。
加油!

作者: 杨佳名    时间: 2014-11-20 00:21
空灵 发表于 2014-11-20 00:06
打字扒资料累死了,版主就给一个技术分啊,菜鸟没前途啊

总结的很不错,必须给赞一个!但相信你所收获东西,远比这一个技术分所含的分量重得多。
说实话,看到标题就不想给加分了,但确实是总结的很认真。学到东西才是自己的,不要为了技术分而发帖。相信只要态度有了,技术分自然就会有的。
加油!

作者: huangkj    时间: 2014-11-20 01:31
final:最终,是一个修饰符,
作者: 海阔天空ZJ    时间: 2014-11-20 09:22
谢谢分享
作者: 阿穆隆    时间: 2014-11-20 11:25
额。。。好逸恶劳的已保存,LZ大好人。。。祝LZ长命百岁,多发几个,,,
作者: sk0806    时间: 2014-11-20 13:43
楼主看到马友们的支持,难道不比得到技术分高兴?相信自己,没有什么比得到认可更高兴。
作者: 空灵    时间: 2014-11-20 19:11
我只能说谢谢支持了:)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2