
java的子类继承父类过程是怎样的?解释一下这个程序运行的结果。
publicclassFatherChild{publicstaticvoidmain(String[]args){//主方法开始Childc=newChild();//...
public class FatherChild {
public static void main(String[] args) { // 主方法开始
Child c = new Child(); // 实例化
}
}
class Father {
public Father() {
System.out.println("父类无参构造函数");
}
public Father(String name) {
System.out.println("父类有参构造函数");
}
}
class Child extends Father {
public Child() {
this("dd");
System.out.println("子类无参构造函数");
}
public Child(String name) {
super("dd");
System.out.println("子类有参构造函数");
} 展开
public static void main(String[] args) { // 主方法开始
Child c = new Child(); // 实例化
}
}
class Father {
public Father() {
System.out.println("父类无参构造函数");
}
public Father(String name) {
System.out.println("父类有参构造函数");
}
}
class Child extends Father {
public Child() {
this("dd");
System.out.println("子类无参构造函数");
}
public Child(String name) {
super("dd");
System.out.println("子类有参构造函数");
} 展开
4个回答
展开全部
其实就是你对this 和super的理解不好,好好琢磨下。实在不行就硬记下来,等以后学得多了,自然而然就理解了。
给你个注释,有编号,你沿着编号好好看看。
public class FatherChild {
public static void main(String[] args) {
Child c = new Child();// 1.创建Child对象,调用默认构造器
}
}
class Father {
public Father() {
System.out.println("父类无参构造函数");
}
public Father(String name) {// 6.父类有参构造器
System.out.println("父类有参构造函数");
}
}
class Child extends Father {
public Child() { // 2.默认构造器.创建Child对象
this("dd");// 3.调用本类的有参构造器
System.out.println("子类无参构造函数");
}
public Child(String name) {// 4.有参构造器
super("dd");// 5.调用父类有参构造器
System.out.println("子类有参构造函数");
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你好!!
1. Child c = new Child(); //这句开始进入Child类的无参构造函数
2.
public Child() {
this("dd"); //调用了本类的一个有参的构造函数 --->>见 3
System.out.println("子类无参构造函数");
}
3.
public Child(String name) {
super("dd"); //调用了父类的有参的构造函数 --->>见 4
System.out.println("子类有参构造函数");
}
4.
public Father(String name) {
System.out.println("父类有参构造函数");
}
所以最后的打印内容为:
父类有参构造函数
子类有参构造函数
子类无参构造函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
lz的继承好绕啊,学习了。
实例化child的时候,无参,先运行public Child();但是这里面有this(dd),这意思是运行Child(dd)。
于是运行有参的Child(dd),但是它又super(dd),运行有参的父类也就是father(dd)。
于是输出顺序是father(dd)——child(dd)——child()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能。用白话来说就是,子类拥有父类的所有,并且比父类更高级。
对构造方法的调用:
1.子类的构造过程中必须调用其基类的构造方法;
2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法;
如果调用super,必须写在子类构造方法的第一行;
3.如果子类的构造方法中没有显式调用基类构造方法,则系统默认调用基类无参数的构造方法;
4.如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。
就拿你上面的代码来说吧:
//child类集成了father类,此时child类就拥有了父类的所有属性及方法。
class Child extends Father {
//当child类被用new Child();初始化时会调用该无参构造方法,而当该方法中没用super显示调用父类的构造方法时,他会默认调用父类的无参构造方法
public Child() {
//调用本类的有参构造方法(public Child(String name))
this("dd");
System.out.println("子类无参构造函数");
}
public Child(String name) {
//调用父类的有参构造方法
super("dd");
System.out.println("子类有参构造函数");
}
所以执行的结果为:
父类有参构造函数
子类有参构造函数
子类无参构造函数
对构造方法的调用:
1.子类的构造过程中必须调用其基类的构造方法;
2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法;
如果调用super,必须写在子类构造方法的第一行;
3.如果子类的构造方法中没有显式调用基类构造方法,则系统默认调用基类无参数的构造方法;
4.如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。
就拿你上面的代码来说吧:
//child类集成了father类,此时child类就拥有了父类的所有属性及方法。
class Child extends Father {
//当child类被用new Child();初始化时会调用该无参构造方法,而当该方法中没用super显示调用父类的构造方法时,他会默认调用父类的无参构造方法
public Child() {
//调用本类的有参构造方法(public Child(String name))
this("dd");
System.out.println("子类无参构造函数");
}
public Child(String name) {
//调用父类的有参构造方法
super("dd");
System.out.println("子类有参构造函数");
}
所以执行的结果为:
父类有参构造函数
子类有参构造函数
子类无参构造函数
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询