Java面向对象6——继承中的构造方法
2016-10-20 15:15
429 查看
子类的构造过程中必须调用其基类的构造方法。
子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法
- 使用this(argument_list)调用本类的另外的构造方法
- 如果调用super,必须写在子类构造方法的第一行
如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用基类无参数的构造方法。
如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。
实例1:
实例2:
运行结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/21/ac0c4abb22da57617b28ec1b7840efb0)
实例3:
结果:
子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法
- 使用this(argument_list)调用本类的另外的构造方法
- 如果调用super,必须写在子类构造方法的第一行
如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用基类无参数的构造方法。
如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。
实例1:
class SuperClass { private int n; /* SuperClass() { System.out.println("SuperClass()"); } */ SuperClass(int n) { System.out.println("SuperClass(" + n + ")"); this.n = n; } } class SubClass extends SuperClass { private int n; SubClass(int n) { //此处相当于调用了super(); System.out.println("SubClass(" + n + ")"); this.n = n; } SubClass() { super(300);//对super的调用必须在第一行 System.out.println("SubClass()"); } } public class TestSuperSub { public static void main(String arg[]) { //SubClass sc1 = new SubClass(); SubClass sc2 = new SubClass(400); } }
实例2:
class A{ protected void print(String s){ System.out.println(s); } A(){ print("A()"); } public void f() { print("A:f()"); } } class B extends A{ B(){//子类的构造方法 //自动调用父类无参数的构造方法A(); print("B()"); } public void f() { //重写了基类中的方法 print("B:f()"); } public static void main(String[] args){ B b = new B(); b.f(); } }
运行结果:
实例3:
class Person{ private String name; private String location; Person(String name){ this.name = name; location = "beijing"; } Person(String name, String location){ this.name = name; this.location = location; } public String info() { return "name: "+name+" location:"+location; } } class Student extends Person{ private String school; Student (String name, String school){ //调用了自己这个类另一个构造方法 this(name,"beijing",school); } Student (String n,String l, String school){ super(n,l); this.school = school; } public String info() { return super.info()+" school: "+school; } } class Teacher extends Person{ private String title; Teacher(String name,String title){ this(name,"beijing",title); } Teacher(String n,String l,String title){ super(n,l); this.title = title; } public String info(){ return super.info()+" title: "+ title; } } public class Test{ public static void main (String[] args){ Person p1 = new Person("A"); Person p2 = new Person("B","Shanghai"); Student s1 = new Student ("C","S1"); Student s2 = new Student ("C","shanghai","S2"); Teacher t1 = new Teacher ("D","Professor"); System.out.println(p1.info()); System.out.println(p2.info()); System.out.println(s1.info()); System.out.println(s2.info()); System.out.println(t1.info()); } }
结果:
相关文章推荐
- JAVA——(2)OOP面向对象、封装、继承、多态、this、构造方法
- Java学习之面向对象(方法的重写 overwrite,super的使用,继承中的构造方法)
- java基础:面向对象(继承中构造方法的注意事项)
- 关于JAVA继承类的静态变量、成员变量、父子类构造方法调用顺序的探讨
- java继承中的构造方法
- 黑马程序员_五 【初识面向对象】【类、构造方法、对象】【封装、继承、多态】【this、super】
- Java继承中父类子类构造方法、静态代码块、非静态代码块的执行顺序
- java继承中的构造方法
- java 继承中的构造方法
- 关于JAVA继承类的静态变量、成员变量、父子类构造方法调用顺序的探讨 .
- Java基础之面向对象(三)--继承、抽象类、接口、final修饰符、模版方法模式
- java面向对象(一)new 关键字的作用&缺省构造方法
- java 面向对象(类,属性 ,方法,包,封装、继承、多态)
- 黑马程序员——java第七天:面向对象(继承、子父类之变量、final、抽象、模板方法、接口)
- Java语言入门教程(十三):Java语言中继承中的构造方法问题
- java继承之构造方法
- java中的继承问题,类B继承A,那么构造方法需要这样写吗?这不是重复吗?还有接口与抽象类怎么实现?
- Java基础之面向对象(三)--继承、抽象类、接口、final修饰符、模版方法模式
- java继承中的构造方法
- java 构造方法的继承