zoukankan      html  css  js  c++  java
  • Android(java)学习笔记60:继承中父类 没有无参构造

    1. 继承中父类 没有无参构造:

     1 package com.himi.test1;
     2 
     3 /*
     4     如果父类没有无参构造方法,那么子类的构造方法会出现什么现象呢?
     5         报错。
     6     如何解决呢?    
     7         A:在父类中加一个无参构造方法
     8         B:通过使用super关键字去显示的调用父类的带参构造方法
     9         C:子类通过this去调用本类的其他构造方法
    10             子类中一定要有一个去访问了父类的构造方法,否则父类数据就没有初始化。
    11             
    12     注意事项:
    13         this(...)或者super(...)必须出现在第一条语句上。
    14         如果不是放在第一条语句上,就可能对父类的数据进行了多次初始化,所以必须放在第一条语句上。
    15 */
    16 class Father {
    17     /*
    18     public Father() {
    19         System.out.println("Father的无参构造方法");
    20     }
    21     */
    22     //如果没有写构造方法,默认有无参构造,这里写了带参构造,无参构造变成了带参构造
    23     public Father(String name) {
    24         System.out.println("Father的带参构造方法");
    25     }
    26 }
    27 
    28 class Son extends Father {
    29     public Son() {
    30         super("随便给");
    31         System.out.println("Son的无参构造方法");
    32         //super("随便给");
    33     }
    34     
    35     public Son(String name) {
    36         //super("随便给");
    37         this();
    38         System.out.println("Son的带参构造方法");
    39     }
    40 }
    41 
    42 public class ExtendDemo2 {
    43     public static void main(String[] args) {
    44         Son s = new Son();
    45         System.out.println("----------------");
    46         Son ss = new Son("林青霞");
    47     }
    48 }

    运行结果:


    这里子类son创建对象的时候,无论它使用无参构造和带参构造,即无论使用new Son(),new Son("林青霞"),这里这些构造方法中默认第一条语句是必须隐式默认是super(),也就是父类的无参构造方法,利用父类的无参构造函数去初始化父类携带的数据,从而提供给子类Son使用。通常父类如果不写构造的话,系统默认父类为无参构造,但是如果父类写了带参构造,那么无参构造就会覆盖掉,这样父类Father()也就没有无参构造了,这样的话前面Son()创建对象时候就会出错。但是也可以显式利用super("name"),调用父类带参构造初始化

  • 相关阅读:
    Consul注销实例
    sql优化基础篇
    linux下执行java类(运行java定时器)
    ExecutorService 的理解与使用
    精度计算的方法
    内部类详解
    接口的作用
    面向对象之继承和组合浅谈
    构造器前篇
    教师编制考试数据分析
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4631091.html
Copyright © 2011-2022 走看看