继承

super关键字

class Animal{
        Animal(){
                System.out.println("constructor Animal");
        }
}

class Cat extends Animal{
        Cat(){
        		//super();
                System.out.println("constructor Cat");
        }
}
public class test{
        public static void main(String [] args){
                Cat cat = new Cat();
        }
}

在构造子类对象时,会先构造父类对象,在代码中的表示就是,先调用子类的构造函数,进入之后,编译器会在每个构造函数的开头第一句默认加上一句super(),这样就可以先构造父类对象了,但是super()也可以自己写出来,这样编译器就不会自动添加了,但是super()这句必须加在构造函数的第一句,否则报错。而且要注意,编译器默认只加上不带参数的父类构造函数,若要加上带参数的父类构造函数,必须手动加上。

讨论一下类在继承时,变量初始化和构造函数的执行顺序问题

class Var{
        Var(int i){
                System.out.println("Var"+i);
        }
}
class Animal{
        Var v1 = new Var(1);
        static Var v2 = new Var(2);
        Animal(){
                System.out.println("constructor Animal");
        }
}

class Cat extends Animal{
        Var v3 = new Var(3);
        static Var v4 = new Var(4);
        Cat(){
                super();
                System.out.println("constructor Cat");
                //super();
        }
}
public class test{
        public static void main(String [] args){
                Cat cat = new Cat();
        }
}

打印结果:

Var2
Var4
Var1
constructor Animal
Var3
constructor Cat

运行这个程序,首先要找到main函数,main函数在test类里面,先加载test类,再运行main函数,main函数第一句是生成一个Cat对象,因此,先要加载Cat类,在加载Cat时,发现Cat继承Animal,因此又去找Animal类,找到Animal类之后,就要初始化类,属于类的内容就是静态变量,静态方法,静态方法块,在初始化类时,会运行静态方法块和对静态变量赋值。初始化Animal之后,对Cat类初始化,初始化过程和Animal一样。全部的类初始化之后,就要开始创建对象了,创建对象首先是创建父类的对象,创建父类对象就要先初始化父类对象的非static成员变量,然后运行父类构造函数,最后就是创建子类对象,其过程和父类也一样。
java允许在子类中重载父类的函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值