聯成電腦技術論壇

 找回密碼
 註冊
搜索
查看: 1908|回復: 1

[求助] 請問一下如何寫這道題目@@

[複製鏈接]
發表於 2012-4-8 10:19:06 | 顯示全部樓層 |閱讀模式
class Ccircle
{
  private static double pi=3.14;
  private double radius;
  public Ccircle(double r)
  {
    radius=r;
  }
  public Ccircle Compare(Ccircle c3)
    {
      if(this.radius>c3.radius)
        return this;
      else
        return c3;
    }
}
public class test01
{
  
  public static void main(String args[])
  {
    Ccircle c1=new Ccircle(1.0);
    Ccircle c2=new Ccircle(2.0);
    Ccircle c3=c1.Compare(c2);
    if(c3==c1)
      System.out.println("r1 more biger");
    else
      System.out.println("t2 more biger");
      
  }
}

在Java2教學手冊中遇到一個難題 請教一下各位大大
如何把在Ccircle類別內的compare()移動到test01類別內@@?
發表於 2012-4-20 00:19:09 | 顯示全部樓層
本帖最後由 586020520 於 2012-4-20 00:49 編輯

這樣
  1. package javaapplication1;

  2. class Ccircle {

  3.     private static double pi = 3.14;
  4.     private double radius;

  5.     public Ccircle(double r) {
  6.         radius = r;
  7.     }

  8.     public double getRadius() {
  9.         return radius;
  10.     }
  11. }

  12. public class test01 extends Ccircle {

  13.     public test01(double r) {
  14.         super(r);
  15.     }

  16.     public Ccircle Compare(Ccircle c3) {
  17.         if (this.getRadius() > c3.getRadius()) {
  18.             return this;
  19.         } else {
  20.             return c3;
  21.         }
  22.     }

  23.     public static void main(String args[]) {
  24.         test01 c1 = new test01(1.0);
  25.         test01 c2 = new test01(2.0);
  26.         test01 c3 = (test01) c1.Compare(c2);
  27.         if (c3 == c1) {
  28.             System.out.println("r1 more biger");
  29.         } else {
  30.             System.out.println("t2 more biger");
  31.         }

  32.     }
  33. }
複製代碼
或是這樣
  1. package javaapplication1;

  2. class Ccircle {

  3.     private static double pi = 3.14;
  4.     private double radius;

  5.     public Ccircle(double r) {
  6.         radius = r;
  7.     }

  8.     public double getRadius() {
  9.         return radius;
  10.     }
  11. }

  12. public class test01 extends Ccircle {

  13.     public test01(double r) {
  14.         super(r);
  15.     }




  16.     public Ccircle Compare(Ccircle c3) {
  17.         if (this.getRadius() > c3.getRadius()) {
  18.             return this;
  19.         } else {
  20.             return c3;
  21.         }
  22.     }

  23.     public static void main(String args[]) {
  24.         test01 c1 = new test01(1.0);
  25.         test01 c2 = new test01(2.0);
  26.         Ccircle c3 = c1.Compare(c2);
  27.         if (c3 == c1) {
  28.             System.out.println("r1 more biger");
  29.         } else {
  30.             System.out.println("t2 more biger");
  31.         }

  32.     }
  33. }
複製代碼
跟你解釋一下流程好了

首先把public Ccircle Compare這個方法搬進test01裡面時

第一個遇到的的問題應該是radius這個變數抓不到,因為設成private

所以需要在Ccircle裡面建立一個方法getRadius來專門取radius,這也就是封裝

之後把public Ccircle Compare方法裡的this.radius和c3.radius改成this.getRadius()和c3.getRadius()

這樣還是會有錯誤,因為getRadius是屬於Cclicle的,所以要繼承Cclrcle

繼承之後還是有錯

因為Ccircle沒有預設建構子,所以在test01裡面必須要有一個建構子呼叫父類別的帶參數建構子

public test01(double r) {
        super(r);
    }

再來是把 Ccircle c1 = new Ccircle(1.0); 改成 test01 c1 = new test01(1.0);

因為已經把Compare這個方法搬移到test01裡

所以把c1宣告成Ccircle會抓不到Compare方法

接下來c2要宣告成哪一種都可以,因為test01和Ccircle是繼承關係

最後c3的宣告也是都可以,宣告成test01就用多型 test01 c3 = (test01) c1.Compare(c2);

因為Compare方法的回傳值是Ccircle,所以要轉

宣告成Ccircle就用Ccircle c3 = c1.Compare(c2);

話說這題目還蠻不錯的,OOP的三大特性都有了

By柏宇

PS 我的MSN是a586020520@hotmail.com ,有其他問題可以直接問我(論壇我都是想到才會上來看看),我會就我所了解的跟你說
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



小黑屋|Archiver|手機版|聯成電腦技術論壇  

GMT+8, 2019-11-21 10:04

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表