示例代码:
//先创建两个类,父类和子类。 //父类中有有参构造方法和无参构造方法。 class Father { String name; String age; int id = 1001; public Father(String name, String age) { this.name = name; this.age = age; } public Father() { } public void fatherMethod(){ System.out.println("父类方法被调用"); } /// class Son extends Father{ int grade; int id = 1002; public Son() { } public void methodSon1(){ System.out.println(super.id); System.out.println(id); } public void son(){ super.fatherMethod(); } }
首先明确一点,在构建子类对象的时候,会默认使用super关键字创建一个父类对象,而这个操作是使用super();
语句完成的,如果父类中只有有参构造方法,那么原来默认存在的无参构造方法被有参构造方法覆盖,创建子类对象时就会报错。也就是说如果想创建子类继承父类,那么父类必须存在无参构造方法。
当我们在idea中使用自动生成子类对象的无参构造方法时,会得到下面的代码块:
//自动生成的无参构造方法 public Son(){ super(); }
以上代码表示在创建子类对象中,默认调用了父类的无参构造方法创建了父类对象。而如果我们想在创建子类对象的时候直接调用父类的有参构造方法该如何操作呢?只需要通过如下代码:
public Son(String name,String age){ super(name,age); }
需要注意的是,在子类的构造方法中,this语句和super语句同时出现是不合逻辑的,因为使用this关键字默认调用了子类的构造方法,而这个构造方法已经包含了父类的构造方法,而再次调用super就不合法了,此时系统会报错。
可以通过*super.父类成员变量名;
*的方式直接调用父类的属性值,如果有子类与父类的同名属性,那么此方式会调出父类的属性值。
例如:在文章开头的父类和子类中,分别定义了父类的成员属性id=001;
以及子类的成员属性id=002;
通过创建子类对象并调用子类方法*methodSon1()调用得到的结果如下图所示:
1.在新建子类对象中,可以直接通过对象名.父类方法名;
调用父类的成员方法。
2.在子类的方法体中,通过super.父类方法名;
调用父类的成员方法.
例如在文章开头代码中调用子类的son方法,运行的结果如下图: