广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 9122 个阅读者
 
<<   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.020891 second(s),query:5 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言