本文接上篇——34、类的继承。 子类可以继承父类的除了构造方法以外的所有成员,在子类创建对象时,必须对父类的变量进行初始化。但构造方法是不被继承的,故要在子类当中调用父类的构造方法。 如果子类中没有显式调用父类的构造方法,Java默认调用父类无参数的构造方法。若父类没有不带参的构造方法,将出错。 1、 使用super()调用父类的构造方法 在子类中,可以使用“super引用”调用父类的构造方法。 其语法格式如下: super([参数列表]) 例如:在Student类中,其继承自Person类,其构造方法可声明如下: public Student(){ super();//此处可省,调用父类无参数构造方法 number=123; } public Student(String name,int number){ super(name);//调用父类带参数构造方法 this.number=number; } 2、 默认执行super() 有两种情况,Java会默认执行super。 (1) 当一个类没有声明构造方法时,Java为该类提供默认的构造方法,可默认调用父类super() 。 例: class A{ int i; public A(){ i=1; } public int getI(){ return i; } } public class Add extends A{ public static void main(String args[]){ Add a=new Add(); System.out.print(a.getI()); } } 此运行结果为:1。 本例是,Add类继承自A类,在A类中有构造方法A()不带参。在子类Add中,并没有构造方法,此时在创建Add的对象时,会自动调用super()不带参的构造方法,使i的值初始化为1,故输出为1。 (2) 如果子类的构造方法没有调用super()或this(),Java将默认执行super()。 例: class A{ int i; public A(){ i=1; } public int getI(){ return i; } } //类Add,继承类A public class Add extends A{ int j; public Add(){ j=3; } public static void main(String args[]){ Add a=new Add(); System.out.print(a.getI()+""+a.j); } } 其运行结果为:1 3 本例中,Add继承自A类,在A类中有构造方法A(),在Add类中有构造方法Add()。但在子类Add中并没有显式调用父类的构造方法,其默认调用了父类不带参的构造方法,将i赋值为1,而在Add构造方法中将j赋值为3,故输出为1 和3。 在使用类的继承时,一定要注意是先创建父类对象再创建子类对象,因此在写子类的构造方法时,要分清它到底应该调用父类的哪一个构造方法,以免出错。 例: class Person{ private String name; public Person(){ this("张熹熹"); } public Person(String name){ this.name=name; } publicvoid show(){ System.out.println("姓名:"+name); } } public class Student extends Person{ private String number; public Student(){ number="123";//默认调用父类的Person() } public Student(Stringnumber){ super();//调用父类的不带参构造方法 this.number=number; } public Student(Stringname,String number){ super(name);//调用父类带参的构造方法 this.number=number; } public void show(){//覆盖父类的方法 super.show();//调用父类的方法 System.out.println("学号:"+number); } public static void main(String args[]){ Student s1=new Student(); s1.show(); Student s2=new Student("645"); s2.show(); Student s=new Student("Lay","107"); s.show(); } } 其运行结果为: 姓名:张熹熹 学号:123 姓名:张熹熹 学号:645 姓名:Lay 学号:107 |
|
来自: pythonjava学习 > 《待分类》