
本文共 1645 字,大约阅读时间需要 5 分钟。
首先回顾之前学习的知识可知:一个类的组成有三个部分,构造函数、成员变量、成员方法(也就是成员函数)。
在面向对象的世界当中,继承就是一个类得到了另外一个类当中的成员变量和成员方法,在JAVA中只支持单继承;
如下两处代码:
代码段一:
class Lesson7{ String str; int a; void funA{ System.out.println("FunA:the Str = " + str + " the a = "+ a); }}
代码段二:
class Lesson7_2 extends Lesson7{ }
代码段一是一个普通的类。
代码段二就使用了继承的方式定义。在是是有那个的时候用到了一个关键字"extends"。
其中Lesson7_2是子类,Lesson7是父类,在子类Lesson7_2中并没有定义任何的成员变量和成员方法,但是由继承的定义可知,Lesson7_2是包含有父类Lesson7中的成员变量和成员方法的。
编写测试代码如下:
class Test{ public static void main(String args []){ Lesson7_2 A = new Lesson7_2(); A.str = "Lesson7_2"; A.a = 20; A.funA(); }}
测试输出结果如下:
D:\Android\src>javac Lesson7.javaD:\Android\src>javac Lesson7_2.javaD:\Android\src>javac Test.javaD:\Android\src>java TestFunA:the Str = Lesson7_2 the a = 20D:\Android\src>
这也验证了子类Lesson7_2拥有父类Lesson7_2中的成员变量和成员函数。当然了,子类当中也可以加入一些父类没有的成员变量和成员函数。
如:
class Lesson7_2 extends Lesson7{ String str2; int a2; void funA2(){ System.out.println("It is funA2!"); }}
通过把共同的成员变量和成员函数放在父类里面去,用继承的方式也可以减少代码的重复量,同时在工程中修改代码上会减少很多工作量。
/**************************************************华丽分割线*******************************************/
上述已经提到,子类可以集成父类的成员函数和成员变量,但是父类的构造函数是无法集成的。这就有了子类调用父类构造函数super的用法,同样使用super调用父类的构造函数也是为了子类为成员变量赋值和减少重复代码。
如:
class Lesson7{ String str; int a; void Lesson7(String str,int a){ this.str = str; this.a = a; }}
class Lesson7_2 extends Lesson7{ super("Lesson7_2",20); System.out.println("this Lesson7_2 fun()");}这里需要注意以下几点:
当在生成子类的过程中没有使用super调用父类的情况下,编译器会自动的生成一条super();也就是默认调用父类中无参数的构造函数。使用super来调用父类的构造函数,在编程的时候需要把super函数放在第一句。super调用父类中哪一个构造函数取决于传入的形参,根据形参的顺序、类型、个数等相匹配得到将要调用的父类中的构造函数,这一特征跟之前讲述的this用法也比较相像。
By Urien 2017年8月28日 21:08:22
发表评论
最新留言
关于作者
