请问是哪里错了,谢谢!小弟初学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';
}
}

解决方案 »

  1.   

    void B(int x)
    这一行,把void去掉构造方法不能 加 void
      

  2.   

    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';
    }
    }
      

  3.   

    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';
    }
    }
      

  4.   

    还有一点,构造方法前不要加返回值类型,void修饰符也不可以加,
    因为加了返回值就不是构造方法了,虽然你类名和这个方法名相同,但虚拟机也不会认为,他是构造函数,实际上,他只是长的比较像构造函数的普通方法,而以...
    void A(int y)//不要加VOid
    {
    this.i=y;
    }
    void B(int x)//不要加VOid
    {
    this.i=x;
    }
      

  5.   

    1. 构造函数不能有返回值,即使是void也不行。2. 构造函数根本不能被继承。
      

  6.   

    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()