黑马程序员技术交流社区
标题:
子类继承父类与super
[打印本页]
作者:
虾米吃螃蟹
时间:
2015-7-13 10:26
标题:
子类继承父类与super
本帖最后由 虾米吃螃蟹 于 2015-7-13 10:28 编辑
</blockquote></div><div class="blockcode"><blockquote>public class Example7
{
public static void main(String [] args){
Child ch1=new Child();
System.out.println("分割线————————分割线");
Child ch2=new Child(3);
}
}
class Child extends Person{
public Child(){
super();
}
public Child(int b){
System.out.println("此处为子类:"+b);
}
public void func(){
System.out.println("b,");
}
}
class Person{
public Person(){
func();
}
public Person(int a){
System.out.println("此处为父类:"+a);
}
public void func(){
System.out.println("a,");
}
}
复制代码
输出为:b,
分割线————————分割线
b,
此处为子类:3
当子类Child覆盖(重写)了父类Person中的方法func(),在子类中通过super()引用父类时,输出的为子类的方法。而如果将父类中的无参构造方法删除子类的有参构造方法
public Child(int b){
System.out.println("此处为子类:"+b);
}
复制代码
会报错“
[backcolor=rgba(255, 255, 255, 0.8)]
Implicit super constructor Person() is undefined.
[backcolor=rgba(255, 255, 255, 0.8)]
Must explicitly invoke another constructor
”。因为此处有隐式super()会去调用父类的无参构造方法,而报错。
因此:1、子类的构造方法会有隐式super()去调用父类的无参构造方法,而若父类中没有无参构造方法,程序会报错;
2、当父类没有无参构造方法时,必须在子类构造方法的首行写super(参数)语句;
3、当子类中的方法重写了父类的方法时即例中的func(),通过super()调用父类时,输出为子类的func()
作者:
汪磊の
时间:
2015-7-13 17:24
顶一个!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2