构造函数的继承问题,请大家帮帮忙

jy02209334 2006-09-02 06:15:23
请问是哪里错了,谢谢!小弟初学JAVA,请问大家哪里有介绍构造函数的继承问题的好文章,谢谢了!~

public class Example1 {

public static void main(String[] args)
{
B b;
b=new B(12);
System.out.print(b.i+" "+b.f()+" "+b.g()+" "+B.g()+'\n');
A a=b;
System.out.print(a.i+" "+a.f()+" "+a.g()+" "+A.g()+'\n');

}

}

class A
{
int i;
void A(int y)
{
this.i=y;
}
char f()
{
return 'a';
}
static char g()
{
return 'A';
}
}

class B extends A
{
int i;
void B(int x)
{
this.i=x;
}
char f()
{
return 'b';
}
static char g()
{
return 'B';
}
}
...全文
404 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
huliangyu 2006-09-18
  • 打赏
  • 举报
回复
import java.util.*;
class super1{
{
System.out.println("super1 ok");
}
super1()
{
System.out.println("3");
}
}


class Employee extends super1{
private String name;
private double salary=1500.00;
private Date birthday;
public Employee(String n,Date DoB){
System.out.println("2");
name=n;
birthday=DoB;
}
public Employee(String n){
this(n,null);
System.out.println("4");
}
}


class Manager extends Employee{
{
System.out.println("Manager ok");
}
private String department;
public Manager(String n,String d){
super(n);
department=d;
}
}


public class test1{
public static void main(String args[]){
new Manager("Smith","sales");
}
}
new Manager("Smith","sales")调用过程:
(1)绑定构造函数参数。其实就是传递参数的过程
(2)查看是否有this()语句。没有。虽然没有使用this()语句调用构造函数,但是该步骤不能省略
(3)调用super()语句,此时,程序跳转到Public Employee(String n)。
(4)绑定构造函数参数String n
(5)查看是否有this()。有,则执行构造函数public Employee(String n,Date DoB)
(6)绑定构造函数参数String n,Date DoB
(7)查看是否有this()语句。没有
(8)执行有系统自动插入的super()语句:执行super1()
(9)执行显式初始化语句System.out.println("super1 ok");
(10)执行构造函数语句System.out.println("3");
(11)执行显式初始化语句private double salary=1500.00;
(12)执行构造函数语句System.out.println("2");同时执行name=n;birthday=DoB;
(13)执行构造函数语句System.out.println("4");
(14)执行显式初始化语句System.out.println("Manager ok");
(15)执行构造函数语句department=d;
几点总结:
(1)对象是由new运算符创建的,且在任何构造函数执行之前就已经创建完毕了
(2)构造函数的执行总是“向上”的:而且总是先执行完父类的构造函数
(3)在构造函数中,没有this()语句则由super()语句。没有this()时,或者自己编写super(),或者由系统自动调
用 super()
(4)显式初始化语句总是先于构造函数语句,但后于super()或this()
guojun001202 2006-09-18
  • 打赏
  • 举报
回复
看看Thinking In Java吧
学习Java中 2006-09-16
  • 打赏
  • 举报
回复
首先要执行子类的构造函数,但是由于子类继承父类,
所以子类的缺省构造函数自动调用父类的缺省构造函数。先产生父类的实例,
然后再产生子类的实例。
Dan1980 2006-09-16
  • 打赏
  • 举报
回复
1. 构造函数不能有返回值,即使是void也不行。

2. 构造函数根本不能被继承。
lipengxing521 2006-09-16
  • 打赏
  • 举报
回复
还有一点,构造方法前不要加返回值类型,void修饰符也不可以加,
因为加了返回值就不是构造方法了,虽然你类名和这个方法名相同,但虚拟机也不会认为,他是构造函数,实际上,他只是长的比较像构造函数的普通方法,而以...
void A(int y)//不要加VOid
{
this.i=y;
}
void B(int x)//不要加VOid
{
this.i=x;
}
lipengxing521 2006-09-16
  • 打赏
  • 举报
回复
public class Example1 {

public static void main(String[] args)
{
B b;
b=new B(12);
// System.out.print(b.i+" "+b.f()+" "+b.g()+" "+B.g()+'\n');
// A a=b;
// System.out.print(a.i+" "+a.f()+" "+a.g()+" "+A.g()+'\n');
System.out.print(b.i+" "+b.f()+" "+b.g()+'\n');
A a=b;
System.out.print(a.i+" "+a.f()+" "+a.g()+'\n');

}

}

class A
{
int i;

public A() {
//这里要有一个默认构造方法. 因为在创建子类对象时,会先调用父类默认构造方法
}
public A(int y) {
this.i=y;
}
char f()
{
return 'a';
}
// static char g()//父类的静态(Static)方法.子类不能覆盖,虽然你表面上覆盖
// {        //了父类的静态(Static)方法,但实际上你是建立了一个新的
// return 'A';    //静态(Static)方法
// }
char g()
{
return 'A';
}

}

class B extends A
{
int i;
void B(int x)
{
this.i=x;
}

char f()
{
return 'b';
}
// static char g()
// {
// return 'B';
// }

char g() {

return 'B';
}


}
software_jianghai 2006-09-16
  • 打赏
  • 举报
回复
mark
wts173 2006-09-15
  • 打赏
  • 举报
回复
up
wts173 2006-09-15
  • 打赏
  • 举报
回复
up
Camelh 2006-09-02
  • 打赏
  • 举报
回复
public class Example1 {

public static void main(String[] args) {
B b;
b = new B(12);
System.out.print(b.i + " " + b.f() + " " + b.g() + " " + B.g() + '\n');
A a = b;
System.out.print(a.i + " " + a.f() + " " + a.g() + " " + A.g() + '\n');

}

}

class A {
int i;

A() {//这里还要加一个默认的构造函数才行;因为你在子类中没有调用你自定义的构造函数,那么将调用默认的构造函数;由于你有自定义的构造函数,所以默认构造函数必须显示的写出来;
}

A(int y) {//构造函数没有void
this.i = y;
}

char f() {
return 'a';
}

static char g() { //你在main方法中是通过对象来调用此函数,那么最好把static去掉,否则就用类名.方法名来调用
return 'A';
}
}

class B extends A {
int i;

B(int x) {
this.i = x;
}

char f() {
return 'b';
}

static char g() {
return 'B';
}
}
jy02209334 2006-09-02
  • 打赏
  • 举报
回复
谢谢阿,呵呵!看书不仔细
DrinkT 2006-09-02
  • 打赏
  • 举报
回复
void B(int x)
这一行,把void去掉

构造方法不能 加 void

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧