继承

xiaoxiao2021-08-20  482

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

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

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

 

转载请注明原文地址: https://www.6miu.com/read-4823505.html

最新回复(0)