首页 > 代码库 > [Java问题] 继承方法调用问题

[Java问题] 继承方法调用问题

  由于用java的时间不长,一上来就让我把一个软件从matlab移到java中,所以不断出现了很多问题,解决这些问题最快的方法就是写一些小代码调试和上网问度娘,另一个方法是问师兄,但是跟他们描述一个问题的时候比我上网搜发的时候还多,另外他们也未必知道答案,所以第二个方法我很少用,这也是我写这篇文章的原因,把问题写下来,慢慢思考,随着java技术的增进,说不定会解决,即使不能解决,下一次编程的时候,我也知道这样编写代码是不能达到我的要求的,要换一中方法。

  说了这么多,来说我遇到的继承方法调用的问题吧,来看一个例子:

  文件1名称:First.java

public class First
{
   private double a =10;
   private double b =20;
 
 public First()
 {
  
 }
 
 public First(double a,double b)
 {
    this.a =a ;
    this.b =b;
 }
 
 public double getA()
 {
    return a;
 }
 
 public double getB()
 {
    return b;
 }
 
}

  

  文件2名称:Second.java


public class Second extends First
{
   private double a;
   private double b;
   First first ;
 
 public Second (First first)
 {
    this.first = first;
    a = first.getA();
    b  = first.getB();
 }
 

 }

  文件3名称:test.java(主函数所在的文件)

public class test

 public static void main(String [] args)
 {
    First firstMain = new First(30,40);
    Second SecondMain = new Second(firstMain);
    double testa = SecondMain.getA();
    double testb = SecondMain.getB();
    System.out.println(testa);
    System.out.println(testb);
 } 

}

主函数用Debug调试截图:

技术分享    技术分享

 

技术分享     技术分享

输出结果是:10 ,20.很显然这并不是我想要的答案,我要的答案是30 ,40.

 

对文档1中的方法在文档2中重写,就可以得到我想要的答案.具体如下:

  在文档2中添加getA()和getB()方法,即重写(@Override)。

  对主函数调试结果如下:

  技术分享  技术分享

  

 

对以上问题,换一个思路考虑,如果不采用继承,在文档2中在一次写getA()和getB()方法,即文档2的完整java程序如下:

public class Second       //此处与前面的文档2不一样,这里不再是extends继承关系
{
   private double a;
   private double b;
   First first ;
 
 public Second (First first)
 {
    this.first = first;
    a = first.getA();
    b  = first.getB();
 }
 
 
 public double getA()
 {
    return a;
 }
 

 public double getB()
 {
    return b;
 }

}

 

其他文档程序不变,调试结果如下:

技术分享  技术分享

 

技术分享     技术分享

答案也是我想要的30、40.

  

  虽然这两种方法都可以达到我要的结果,但是使用extends可以节省重复输入代码,所以,如何使用继承关系达到我想要的结果,目前我没有办法解决。

 

P.S.

  比较有继承和无继承变量SecondMain时很容易就可以理解继承和无继承的区别:

  (再次把截图附在附上:如下)

  技术分享    技术分享

           继承关系SecondMain变量截图                   无继承关系的SecondMain变量截图

 

[Java问题] 继承方法调用问题