广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 6412 个阅读者
 
<<   1   2  下页 >>(共 2 页)
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
对的人
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x228
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[Java][求助] 继承观念问题
各位大大好,我是超级新手,有几个观念性的问题想请教,以下是Code:

Code太长,改用临时网页代替:http://myhome.kbronet.com.tw/a1986751106/
我的问题是...如果把这段删除的话,结果还 ..

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容



献花 x0 回到顶端 [楼 主] From:台湾凯擘 | Posted:2009-04-07 00:13 |
overing 手机
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x55
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

把目录下的 .class 档都杀干净再编译看看

之所以你第二次删除这段还能编译成功
我想是因为前一次编译已经有产生 Land.class
第二次编译虽然你删掉Land的定义
不过编译器会尝试寻找workpath还有classpath底下
有没有 Land.java(或有定义Land的其他 .java) 或是 Land.class
有找到而且继承架构正确还是会让你编译成功

另外...code麻烦记得缩排一下 表情
多按几个空白或是TAB键会让你的程式看起来好读很多


Zippy G2 600W
Intel C2Q Q9550
Gigabyte GA-X48-DQ6
Gigabyte GV-NX96T512H-B
G-skill pi 1100MHz 2Gx4
ACARD ANS-9010 32GB (Windows7 10sec boot!!)
WD 150GB(WD1500ADFD)/640GB(6400AASK)
献花 x1 回到顶端 [1 楼] From:未知地址 | Posted:2009-04-09 08:37 |
对的人
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x228
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

感谢大大回应,我知道了^^。


不过还有个问题:
return (int)( this.price()-l.price())

请问这段 的 this.price 的值为多少? 这样问好像不对,他所指的this.price()是从哪 抓的?


献花 x0 回到顶端 [2 楼] From:台湾凯擘 | Posted:2009-04-09 23:09 |
overing 手机
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x55
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

this 同常指的是 类别定义 所生成的物件本身
相对的词是super 指的是父类别 生成的物件
通常用在子类有复写父类的成员时 要指明用哪边的成员

举个例子可能不是很贴切 看看就好
复制程式
class Father {
    void printMe() { System.out.println("Father"); }
}
public class Son extends Father {
    void printMe() { System.out.println("Son"); }
    void printMyFather() { super.printMe(); }
    public static void main(String[] argv) {
        Son s = new Son();
        s.printMe();
        s.printMyFather();
    }
}


Zippy G2 600W
Intel C2Q Q9550
Gigabyte GA-X48-DQ6
Gigabyte GV-NX96T512H-B
G-skill pi 1100MHz 2Gx4
ACARD ANS-9010 32GB (Windows7 10sec boot!!)
WD 150GB(WD1500ADFD)/640GB(6400AASK)
献花 x1 回到顶端 [3 楼] From:未知地址 | Posted:2009-04-11 05:10 |
对的人
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x228
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

大大我是懂this 的用法, 但我的问题..还是搞不懂..

return (int)( this.price()-l.price())


我应该要问,this.price()抓取的第一次的值为多少?


献花 x0 回到顶端 [4 楼] From:台湾凯擘 | Posted:2009-04-11 20:59 |
overing 手机
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x55
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

你确定 this 的意思真的有弄懂吗? 表情

这 this 是位在 abstract class Land 下
所以真正 this 的时候是会去指到继承 Land 的类别所生产出来的物件本身

而他呼叫的 price() 方法在 Land的定义中也是抽象的
所以真正在呼叫的时候 会呼叫的是"实作"了这方法的子类别

复制程式
Land l1 = new Circle(5,1000);
Land l2 = new Square(3,2000);
l1.price(); //这呼叫的是 Circle 的
l2.price(); //这呼叫的就是 Square 的了

抽象的东西是没有实体的
全看你真正去生成时 是什么物件(物件才有实体)
来决定这抽象的东西是什么


Zippy G2 600W
Intel C2Q Q9550
Gigabyte GA-X48-DQ6
Gigabyte GV-NX96T512H-B
G-skill pi 1100MHz 2Gx4
ACARD ANS-9010 32GB (Windows7 10sec boot!!)
WD 150GB(WD1500ADFD)/640GB(6400AASK)
献花 x1 回到顶端 [5 楼] From:未知地址 | Posted:2009-04-11 21:17 |
对的人
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x228
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

这 this 是位在 abstract class Land 下
所以真正 this 的时候是会去指到继承 Land 的类别所生产出来的物件本身

那请问大大...l.price() 方法 不就等于 this.price() ?? 这样两个互减要怎排序??


献花 x0 回到顶端 [6 楼] From:台湾凯擘 | Posted:2009-04-11 21:26 |
overing 手机
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x55
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

这两个并不是"同一个"物件呦~
复制程式
    public int compare(ICanCompare i) { // 实作compare
        Land l = (Land) i;
        return (int)(this.price() - l.price()); // 依据面积比较大小
    }
this 这个是呼叫 compare() 这方法本身的物件
l 这个是透过参数 i 传近来之后 当成(Land) 的物件

往回看看呼叫 compare() 的地方
复制程式
    static void bSort(ICanCompare[] objs){
        for(int i=objs.length-1;i>0;i--){
            for(int j=0;j<i;j++){
                if(objs[j].compare(objs[j+1])<0){
                    ICanCompare temp=objs[j];
                    objs[j]=objs[j+1];
                    objs[j+1]=temp;
                }
            }
        }
    }
if(objs[j].compare(objs[j+1])<0)
注意看~经过这行呼叫的 compare()
到return的时候 是会变成 objs[j].price() - objs[j+1].price() 的呦~ 表情


Zippy G2 600W
Intel C2Q Q9550
Gigabyte GA-X48-DQ6
Gigabyte GV-NX96T512H-B
G-skill pi 1100MHz 2Gx4
ACARD ANS-9010 32GB (Windows7 10sec boot!!)
WD 150GB(WD1500ADFD)/640GB(6400AASK)
献花 x1 回到顶端 [7 楼] From:未知地址 | Posted:2009-04-11 21:41 |
对的人
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x228
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

那请问...

if(objs[j].compare(objs[j+1])<0)

compare方法里面传的是什么参数?? 如果他是写这样 我还可以理解:
if(objs[j].compare(objs[j+1]))


如果照原本方法,要传什么东西?


献花 x0 回到顶端 [8 楼] From:台湾凯擘 | Posted:2009-04-11 22:09 |
overing 手机
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x55
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

if(objs[j].compare(objs[j+1]))
的话就没意义了 编译器也不会给过的
if()条件里面叙述句最后的运算结果必须是 boolean
可是 compare() 方法的传回值是
public int compare(ICanCompare i) {}
是 int 而这个int代表的是两物件之间的面积差

所以回到 if(objs[j].compare(objs[j+1])<0)来看
这句翻成白话文 "如果 objs[j] 面积减 objs[j+1]面积 小于0就..."
那段的程式码就是一个个去互相比较
如果阵列中 第 j 位置的形状面积减去 第 j+1位置的形状面积小于0
表示 j那位置的形状面积 比 j+1位置的形状面积小
于是就将两个交换位置
因为排序后的阵列要"面积大的在上面"

复制程式
//这是典型的气泡式排序法
    static void bSort(ICanCompare[] objs){ //排序用的副程式 参数接受一个 ICanCompare阵列
        for(int i=objs.length-1;i>0;i--){ //回圈, i由阵列最底端开始, >0就继续执行, 每圈完 i-1
            for(int j=0;j<i;j++){ //回圈, j从0开始, <i就继续执行, 每圈完 j-1
                if(objs[j].compare(objs[j+1])<0){ //如果 阵列中第j位置的形状面积-第j+1位置的形状面积<0 (表示j+1那个形状比较大)
                    ICanCompare temp=objs[j]; //开个暂存空间放 阵列位置j的形状
                    objs[j]=objs[j+1]; //将阵列j+1位置的形状放到阵列j位置
                    objs[j+1]=temp;//将暂存的形状放到阵列位置j+1
                }
            }
        }
    }


[ 此文章被overing在2009-04-11 22:41重新编辑 ]

此文章被评分,最近评分记录
财富:50 (by 三仙) | 理由: 因为您的参与,让程式设计更容易!!


Zippy G2 600W
Intel C2Q Q9550
Gigabyte GA-X48-DQ6
Gigabyte GV-NX96T512H-B
G-skill pi 1100MHz 2Gx4
ACARD ANS-9010 32GB (Windows7 10sec boot!!)
WD 150GB(WD1500ADFD)/640GB(6400AASK)
献花 x1 回到顶端 [9 楼] From:未知地址 | Posted:2009-04-11 22:29 |

<<   1   2  下页 >>(共 2 页)
首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.023694 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言