继承(Extends)
1、前言
还是先说一下博主本人的一些基本情况吧。本人去年刚刚毕业,专业是电气工程及其自动化,就是在大学期间完全没有接触过JAVA,也就稍稍了解了一下C语言。后来找了现在的工作也是和编程没有任何关系,是的,本人现在就是全职工作,每天的学习时间只有6点下班后,还有锻炼一个小时身体,一天也没有几个小时学习,全都是看视频自学的。不过现在就是打算辞职出去培训班专门学习JAVA,现在发文的根据也是培训机构发过来的视频学习的,等6月份的时候会重新开始,到时候会才最基础的设置环境开始发文。特别强调,本文是我自己对于学习的理解,可能理解不到,甚至是理解错误,所以仅仅作为参考,不作为任何指导,也希望各位看到我的错误能够指出来,谢谢!
2、概念
继承,根据字面意思很容易理解就是父辈把他的东西给子辈,不论父辈有什么,子辈就一定会有什么,不论子辈有多少个,他们得到的都是一样相等的。继承主要解决的问题就是共性抽取。格式如下:
public class 子类名 extends 父类名 {}
3、特点
1> JAVA里面的继承是单继承的:一个类只能拥有一个父类;
2> JAVA可以多级继承:假设类C的父类是类B,类B的父类是类A,那么我们也称A为C的父类;
3> JAVA里面一个父类可以同时拥有多个子类;
4> 子类可以直接调用父类成员变量和方法:父类创建一个int变量int faNum = 10,成员方法method(),里面就输出一句话“父类中的方法”,在测试程序中可以直接这样写:
5> 父类的方法返回类型一定要大于等于子类:就拿我们常见的Object和String类来说,总所周知,Object是所有类的祖宗类,所以我们这样写没有问题:
父类中的方法:
子类中的方法:
但是两者的返回值反过来就会编译报错。
6> 父类中的访问权限一定要小于或者等于子类:
访问权限的4个关键字访问权限大小:public>protected>(default)>private,其中default为默认值,不用写。
4、super和this关键字
刚刚演示了子类可以直接调用父类的成员变量和方法,那么如果父子两个类定义的成员变量的名字和成员方法名字一样,在测试程序里面写子类名.变量名,会输出哪个呢?比如:在父类中定义一个int 值,int num = 10;子类中也定义一个int值,int num = 20;在测试程序里面创建子类的对象,对象名为:son。那么,System.out.println(son.num);会输出什么呢?答案是:20。这个过程可以简单的理解为程序会调用里它最近的那个参数。
上面的例子输出语句也可以这样写:System.out.println(this.num);this关键字可以简单的理解成代替本来的名字。但是上面的例子要输出10的话就需要关键字:super了。输出语句改为:System.out.println(super.num);此时的输出结果就是10。 下面是一个典型的代码:
父类代码:
子类代码:
测试类代码:
输出结果在子类那里已经表明。这几行代码表明了this和super的用法。