java基础之super
前面我简单的说了下继承的基本用法..现在我在补充一点继承中很容易忽视的东西,比如说super

如图,我在父类(Father)中的构造函数中加了一句输出语句,而在子类中我什么都没做..但是在new子类对象的时候,却将父类构造函数里面的内容输出了...怎么回事儿呢??
是不是感到很困惑..我可能用了假的编译器....手动滑稽
好了...我揭开谜底了..因为在构造函数中..都有一个隐式的super()...

这两个类的意思是一样的...
好了,我解释下super这个方法
super的中文解释就是'超' 具体含义呢,就是说调用父类的方法.比如我们之前讲过的this,this是调用(指代)对象本身的方法及其属性,super就是调用这个对象的父类方法和属性.

这里的super(),就是在调用父类的空参数类型的构造方法,所以我们在new子类的时候.遇到子类的构造方法,然后又碰到了super(),所以就将父类空参数构造方法里面的内容给执行了一道.
在这里,提醒一次..在子类构造函数中,默认会有一个super(),它的意思就是调用父类的空参数构造方法..但是..如果你定义过父类的构造方法呢...

发现没..直接就报错了..在java中,每个类都默认有个空参数的构造器,比如Father(){},但是当你自己定义了构造器之后(Father(String args){}),原来默认的构造器就不见啦..如果需要的话,就只能够自己定义了.
而每个子类的构造器中都有一个默认的super方法.这个默认的super()方法,本来是要去访问父类的空参构造方法的.结果你把父类的空参数构造器整不见了..对此.默认的super()方法..表示.它也很绝望啊..然后就提出了抗议(报错了).
那么该怎么解决呢..这里有两个解决方案:
1:自己在多定义一个空参数构造方法..如图

这是一种方法..很容易理解对吧..直接多定义一个就OK了...
2:手动定义super语句...如图

看到了吧..就将默认的super()给替换成了super(String) .眼尖一点的一下就看出来了..super调用父类的构造器时候就是通过参数来识别到底要调用那个构造方法的..画个图,我就不多说了

就酱紫啦...关于super调用构造方法我就说到这里了....
接下来我们谈谈super的另外一个使用方式..调用父类的属性和方法

OK..这是没用super...因为子类把父类的show方法复写了.所以直接就将子类函数中的东西打印出来了...我们在用一下super看看

看..我们在子类show方法中使用super.show(),直接调用父类的show方法..所以就将父类的show方法打印出来了...怎么 好玩不.
当然..super调用方法..我讲了..那么用super调用父类的属性..是不是也是一样的......嘿嘿..我就偷懒了
有什么错误欢迎各位大佬提出......有什么问题请在评论区问....
浙公网安备 33010602011771号