我是靠谱客的博主 鲜艳导师,最近开发中收集的这篇文章主要介绍继承,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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()函数不是无限递归吗???

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

 

最后

以上就是鲜艳导师为你收集整理的继承的全部内容,希望文章能够帮你解决继承所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部