2 zhaiguo42 zhaiguo42 于 2015.06.17 15:20 提问

求解一个关于JAVA的问题

我的代码如下:

public abstract class Example1 {
abstract void testAbstract();
Example1(){//(1)首先执行父类构造方法
System.out.println("before testAbstract()");
testAbstract();//如果调用了抽象方法,调用子类覆盖的方法。这里调用Atest类的testAbstract()方法
System.out.println("after testAbstarcat()");
}
public static void main(String args[]){
new Atest();
}
}
class Atest extends Example1{
private int i=1;//(2)使成员变量进行初始化
void testAbstract(){
System.out.println("testAbstract()"+i);
}
public Atest(){//(3)调用子类构造方法
System.out.println(i);
}
}
Eclipse执行结果如下:
before testAbstract()
testAbstract()0
after testAbstarcat()
1

我刚接触java不久,请教为什么是“testAbstract()0”而不是“testAbstract()1”?

7个回答

bdmh
bdmh   Ds   Rxr 2015.06.17 15:36

先执行父类的构造,此时Atest类自己的i还没有初始化,所以是0

danielinbiti
danielinbiti   Ds   Rxr 2015.06.17 15:36
 java初始化过程
 父类变量初始化-父类构造函数-子类变量初始化-子类构造函数。
 也就是父类构造函数中调用testAbstract是访问子类的testAbstract方法,而根据顺序这时候子类的变量i还进行赋值,还是默认值0.
frank_20080215
frank_20080215   2015.06.17 16:04

初始化时,先调用父类构造函数

u013166918
u013166918   2015.06.17 16:58

有父才有子,有个先后顺序记住就行了

wsh1992o
wsh1992o   Rxr 2015.06.17 20:35

子类的成员在被调用的时候会自动调用父类的构造函数并初始化父类的相应成员

beacon_2011
beacon_2011   Rxr 2015.06.17 21:33

先执行父类再执行子类

cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2015.06.18 00:18

这个顺序就是先执行父类,然后是子类,也是为了达到代码的重复利用吧

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
整数变换问题
问题描述: 整数变换问题。关于整数i的变换f和g定义如下:f(i)=3i;g(i)=i/2。 试设计一个算法,对于给定的2个整数n和m,用最少的f和g变换次数将n变换为m。 例如,可以将整数15用4次变换将它变换为整数4:4=gfgg(15)当整数 n 不可能变换为整数m时,算法应如何处理? 编程任务: 对任意给定的整数 n 和 m,编程计算将整数 n 变换为整数 m所需要的最少变换次数。
【数据结构与算法分析1.2】编写一个程序求解字谜游戏问题
问题描述:输入是由一些字母和单词构成的二维数组,目标是找出字谜中的单词,这些单词可以是水平、垂直或沿对角线以任何方向放置。找出二维数组中所有的单词写完这个程序,手都要断掉了,太TM麻烦了,而且效率很低,到底有多少个for循环,自己都数不清。//1.2编写一个程序求解字谜游戏问题 #include <iostream> using namespace std; /** directions:
编写一个程序求解字谜游戏问题
题目 编写一个程序求解字谜游戏问题。 思路 借鉴前辈的思路 第一种:对单词表中的每个单词,我们检查每一个有序三元组(行,列,方向),验证是否有单词存在。但坏处是这将导致大量嵌套的for循环。 第二种:对于每一个尚未进行到字谜最后的有序四元组(行,列,方向,字符数)我们可以测试所指的单词是否在单词表中。这也导致使用大量嵌套的for循环。如果在任意单词中的最大字符
数据结构和算法设计(迷宫求解问题的栈和队列的实现)
此问题中,迷宫用一个二位数组data[ ][ ]表示,data[i][j]的值为0,则表示该点为通路;如果为1,则表示该点为障碍;如果为-1,则表示该点已经走过。数组的四周值都为1,表示边界。给定起点和终点,求起点到终点的路径。 可以使用栈对二维数组进行深度优先搜索,直到找到终
回溯算法解迷宫问题(java版)
以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计程序,对任意设定的迷宫,求出从入口到出口的所有通路。     下面我们来详细讲一下迷宫问题的回溯算法。     该图是一个迷宫的图。1代表是墙不能走,0是可以走的路线。只能往上下左右走,直到从左上角到右下角出口。     做法是用一个二维数组来定义迷宫的初始状态,然后从左上角开始,不停的去试探所有可行的路线,碰到1就结束本次
解迷宫问题的Java实现
问题: 有一个m行n列的迷宫,只有一个入口和一个出口,用0表示可以走,用1表示不可以走,现在编写一个程序列出所有可以走的路径。 迷宫示例: -1 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 2 0 0 (-1 表示入口,2表示出口) MazeCell类表示迷宫的一个位置: /** * @author cuiods */ public class MazeCe
编写一个程序求解字谜游戏
数据结构与算法分析——c语言描述 练习1.2
破解字谜游戏的小程序
游戏描述:
简单迷宫问题的求解
回溯法解决迷宫问题
傻瓜方法求集合的所有子集问题(java版)
给定任意长度的一个集合,用一个数组表示,如{"a", "b","c"},求它的所有子集。结果是{ {a}, {b}, {c}, {a,b}, {a,c}, {b,c}, {a,b,c}}和一个空集。     下面讲的就是如何用一个原始的傻瓜方法(非算法)求它的所有子集。     首先我们知道是它的子集个数是2^length,如果长度是3,那子集就共有2的3次方=8个,包括空集。     求子