继承

继承也是一个神奇的东西!!!

1、实例化一个对象时,类的执行顺序是怎么样的???

若是有父类,则按照下面的顺序先执行父类,再执行本身(父类也要遵循这个规则)

1、初始化成员变量

2、执行代码块

3、执行构造函数

代码块执行规则:

代码块有两种,一种是声明为static的代码块,另一种就是普通的代码块

1、若是static代码块,则只在首次实例化对象时执行一次,并且早于普通的代码块执行,且只能访问static成员变量

2、若是普通的代码块,则每次实例化一个对象时都会执行

3、对于同一种类的代码块,按照声明的顺序从前到后依次执行

2、创建子类对象时是否会产生父类对象???

不会产生父类对象。首先如果父类是抽象类,抽象类是不能实例化的,这是一个证明;只有new语句才能分配内存产生对象,构造函数只是起初始化作用的,所以不会产生父类对象

3、类A是怎么继承类B的???(注:以下均为非私有的方法或变量,私有的方法或变量无法被继承)

1、类A继承类B的非静态成员变量或方法(以下x指非静态成员变量或方法)

若类A中不含有与类B相同的x,则x指类A继承的x,把x当成自己的使用就可以了

若类A中含有与类B相同的x,则类A中的x将覆盖类B中的x,意思是:x指的是类A本身含有的x,而不是继承的x,注意是"覆盖",也就是类A中仍含有类B中的x,也就表示类A中有两个x,只不过不能直接通过"对象.x"这种方式访问类A继承的x,因为这种方式是访问自己的x,但可以通过super.x访问继承的x

2、类A继承类B的静态成员变量(以下x指静态成员变量)

若类A中不含有与类B相同的x,则类A和类B将共同使用x,在类A中修改x,类B中的x也会被修改;在类B中修改x,类A中的x也会被修改;其实此时类A和类B的x就是同一个x

若类A中含有与类B相同的x,则类A中的x将覆盖类B中的x,也就是类A有两个x,一个自己的、另一个是继承的,继承的x通过super.x访问,在类A中修改super.x,类B中的x也会被修改,在类B中修改x,类A中的super.x也将被修改

类A如何调用函数的???

1、每次先看自己有没有这个函数,若有,就使用自己的函数

仔细理解一下下面的代码:

class B
{
    void f()
    {
        System.out.println("This is the f function in class B");
            f();//调用f()函数
    }
}
public class A extends B
{
    A()
    {
        super();
    }
    void ff()
    {
        System.out.println("This is the ff function in class A");//调用父类的f()函数
        super.f();
    }
    void f()
    {
        System.out.println("This is the f function in class A");
    }
    public static void main(String []args)
    {
        A p=new A();
        p.ff();
    }
}

这个代码是可以正常运行的,运行结果是:

你可能会问:B中的f()函数不是无限递归吗???

仔细体会上面继承的过程。。。。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值