Java中继承与构造方法的关系、成员方法的关系

子类中所有构造方法默认都会访问父类中空参数的构造方法。

         例如下面这个例子:

       

class  Father {

    public Father(){
        System.out.println("Father的无参构造方法");
    }

    }

class Son extends Father{

    public Son(){
        System.out.println("Son的无参构造方法");
    }
}


public class jicheng_biduan {
    public static void main(String[] args) {
       Son son = new Son();


    }
}

运行结果:

由运行结果我们可以看出最后运行的结果Father类中的无参构造方法也被打印出来了,但是我们main函数中并没有声明Father对象,按道理来说,不应该出现Father类中的构造方法,为什么呢?

原因是:因为子类会继承父类的非私有数据,可能也会使用父类中的数据,所以子类初始化之前,一定要完成父类数据的初始化,

attention:子类每一个构造方法第一句都是super();

示例二:




class  Father {

    public Father(){
        System.out.println("Father的无参构造方法");
    }
    public Father(String name){
        System.out.println("Father的有参构造方法");
    }
    }

class Son extends Father{

    public Son(){
        super();   //可注释
        System.out.println("Son的无参构造方法");
    }

    public Son(String name){
        super();    //可注释
        System.out.println("Son的有参构造方法");
    }
}


public class jicheng_biduan {
    public static void main(String[] args) {
       Son son = new Son();
        System.out.println("---------------------");
        Son s2=new Son("王祖贤");

    }
}

运行结果:

由运行结果可得:
s2并没有执行父类的有参构造,所以我们必须记住:子类中所有构造方法默认都会访问父类中空参数的构造方法。

-------------------------------------------------------------------------------------------

若我们不想给父类无参构造,但还想调用父类中有参构造,怎么办呢?

  这时我们可以super(....);方法调用父类中的有参构造函数,同样的,调用时也会对父类进行初始化。

  也可以使用this();方法。

例如:




class  Father {

//    public Father(){
//        System.out.println("Father的无参构造方法");
//    }
    public Father(String name){
        System.out.println("Father的有参构造方法");
    }


}

class Son extends Father{

    public Son(){
        super("linqingxia");
        System.out.println("Son的无参构造方法");
    }

    public Son(String name){
        super("linqingxia");//this();  也可以用this来调用本类中的无参构造,但用this的前提是子类无参构造中含有super(.....);方法
        System.out.println("Son的有参构造方法");
    }
}


public class jicheng_biduan {
    public static void main(String[] args) {
       Son son = new Son();
        System.out.println("---------------------");
        Son s2=new Son("王祖贤");

    }
}

运行结果:

继承中成员方法的关系

   如果父类中的成员方法和子类中方法名字一样,通过子类调用,遵循就近原则。

class  Father {

    public void show(){
        System.out.println("show Father");
    }

}

class Son extends Father{
    
    public void show(){
        System.out.println("show Son");
    }
}


public class jicheng_biduan {
    public static void main(String[] args) {
       Son son = new Son();
        son.show();

    }
}

---------------------------------------------------------------------------------------


class  Father {

    public void show(){
        System.out.println("show Father");
    }

}

class Son extends Father{

//    public void show(){
//        System.out.println("show Son");
//    }
}


public class jicheng_biduan {
    public static void main(String[] args) {
        Son son = new Son();
        son.show();

    }
}

运行结果:

----------------------------------

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值