关于继承的问题,求帮忙解答下,谢谢

问题描述

关于继承的问题,求帮忙解答下,谢谢

public class Demo
{
public static void main(String[] args){

            new B();
            }

}
class A
{
void aFunction(){
System.out.println("AFunction");
}
A(){
System.out.println("A");
aFunction();
System.out.println("after A");
}

}
class B extends A
{
private int values=1;
B(){
System.out.println("B");
}
void aFunction(){
System.out.println("values="+values);
}
}/*output:
A
values=0
after A
B
*/
求解为何父类的构造函数里面调用aFunction()方法,不应该调用自己的吗,怎么调用的是子类的方法?谢谢大家

解决方案

构造函数内调用派生类重写的函数,会导致不可预期的结果(虽然编译器不禁止你这么做)。应该避免这种情况的发生。
Java类的初始化顺序是

先构造A,然后调用A的构造函数,然后构造B,最后调用B的构造函数。
如果B的方法aFunction()调用了B的成员字段比如values,那么如你所见,会没有初始化。如果这个成员是复杂的对象,结果更加微妙。

这个例子应该只是告诉你不应该这么调用。

解决方案二:

B继承了A,你只构造了B,构造B要先构造A,你构造A的时候就会调用A的aFunction()函数,最后再构造B,B的构造没有调用自己的函数啊。这就是你打印的结果

时间: 2024-11-01 11:03:10

关于继承的问题,求帮忙解答下,谢谢的相关文章

file-c语言在linux环境下进行文件复制的代码,使用时出错,求各位大神帮忙解答下

问题描述 c语言在linux环境下进行文件复制的代码,使用时出错,求各位大神帮忙解答下 #include#include#include#include#include#include#include#define BUFSIZE 4096#define COPYMODE 0644 void oops(char *char *);void *emalloc(size_t);void do_copy(char *char *);void copydir(char *char *);int isdi

移动-有关DevExpress 使用求能人 帮忙解答下

问题描述 有关DevExpress 使用求能人 帮忙解答下 用DEV 时Chart(line ) 能不能有啥办法 通过设置控件属性 能让Y抽能放大缩小 , 还有截图上面的 鼠标移动时 显示出来的伸到两坐标抽显示值的横竖叉直线是怎么弄出来的,是跟下面那个X抽放大虽小的那部分一样用另外的控件还是直接可以在Chart里面 设置. 解决方案 十字线的问题已经解决 是有属性可以设置的 ,就是Y 抽要放大缩小 不知道怎么弄

dfs-A*算法的一些小问题求大家帮忙解答下!

问题描述 A*算法的一些小问题求大家帮忙解答下! A*算法怎么才能变为BFS?A*算法在什么情况下没有DFS搜索效果好?A*算法考什么保证它总能找到最优解? 谢谢各位大牛帮忙回答~ 解决方案 1.当树的上一层的f(n)比下一层的f(n)都小时,A*会先访问f(n)最小的,所以,会把上一层全部访问之后,再访问子层 2.最佳结果是在树的最左侧 3. 如果有个非优解G2,那么f(G2)=h(G2)+g(G2),因为G2是一个解,所以h(G2)=0,所以,f(G2)=g(G2),假设a*的解是G,那么f

css3-求css大神帮忙解答下这些都是设置的网页的上的哪一部分的东西的规范?

问题描述 求css大神帮忙解答下这些都是设置的网页的上的哪一部分的东西的规范? #tbheadlogo{ border-bottom:#FB6204 2px solid; background-color:#FFF;} #tbheadnav{ border-bottom:#000 1px solid; background:url(../images/navbg.jpg) repeat-x;} #tbheadnav a{ color:#000;} #tbheadnav a:hover{ colo

希尔排序问题,求帮忙解答

问题描述 希尔排序问题,求帮忙解答 #include #define NUM 15void shellsort(int [] int); int main(){ int i = 0; int v[NUM] = {314528679121523211510};shellsort(vNUM);for(i = 0; i < NUM; i++) printf(""%d ""v[i]);return 0; }//希尔排序void shellsort(int v[] in

java-新人刚学Java,有个很纠结的点求帮忙解答

问题描述 新人刚学Java,有个很纠结的点求帮忙解答 JAVA 在定义一个类时候,在他的内部定义main方法, package com.pc; public class Person { private String name; private String job; private int age; public Person(String name, String job, int age){ this.name = name; this.job = job; this.age = age;

脚本-iOS代码混淆问题 大家帮忙解答下

问题描述 iOS代码混淆问题 大家帮忙解答下 在网上根据念茜的博客 http://blog.csdn.net/yiyaaixuexi/article/details/29201699 实现了函数名的混淆效果,但是如果我想混淆头文件的话这个方法是否行得通,是不是需要重构其他的脚本工具呢?新手,求指教 解决方案 github上有个ZMConfuse,你可以看一下,里面例举了各种的混淆 解决方案二: 头文件,一般是给别人用的,你混淆它想做什么?

java基础-Java基础一个问题,求帮忙解答

问题描述 Java基础一个问题,求帮忙解答 有一个java类 public final class Test{ private long position = -1; public void method(){ position++; } } 当系统中A访问Test method后,position值为多少,B再访问Test method后,position值为多少? 为什么,求帮忙解答? 解决方案 访问之后,position的值始终为0,这是一个final类,每次进去访问时,position的

sampleadapter-求大神帮忙解答下,学习安卓的过程中,关于SampleAdapter的问题

问题描述 求大神帮忙解答下,学习安卓的过程中,关于SampleAdapter的问题 package com.aa.cao; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import a