频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
think in java 手记(一)
2014-07-31 09:04:49           
收藏   我要投稿
工作之余,不知道要做些什么。该做的事情都完成的差不多了,想看一下spring的东西,毕竟这些东西用的多。但是又想看一下关于javaee的东西,这个里面的设计模式多。想了一会儿,觉得这些无非都是工具,java才是基础。突然想起了大学时候,老师推荐的《think in java》,之前看了一遍,懵懵懂懂,现在再看看,结合工作学习中的经验,或许能收获一些不同的东西。

 

(一)关于类和成员的访问权限

 

开篇写到了java类和成员的范围和访问权限,public, private ,protected, friendly。

 

前不久,在工作中,编写一个工具类,其中用到某个model的时候,无论如何,都会报错,提示此类不存在,建议建立一个新的类。当初以为编辑器除了问题,后来查看model类,才发现,原来类是这么定义的:

 

class mymodel{

....

}

这是个默认friendly的类,和我的工具类不在一个包下,所以访问不到这个类的,由此报错。

 

 

(二)关于继承

 

我们费尽心思做出一种数据类型后,假如不得不又新建一种类型,令其实现大致相同的功能,那会是一件非常令人灰心的事情。但若能利用现成的数据类型,对其进行“克隆”,再根据情况进行添加和修改,情况就显得理想多了。“继承”正是针对这个目标而设计的。但继承并不完全等价于克隆。

 

有两种做法可将新得的衍生类与原来的基础类区分开。第一种做法十分简单:为衍生类添加新函数(功能)。尽管extends关键字暗示着我们要为接口“扩展”新功能,但实情并非肯定如此。为区分我们的新类,第二个办法是改变基础类一个现有函数的行为。我们将其称作“改善”那个函数。

 

(三)向上转型()

 

这个东西,曾经困惑了很久,主要是因为这个东西用的实在是太少了。

 

结合书中的代码,我这里也写了一段,关于形状(Shape)和圆形的(Circle)。

 

复制代码

package com.thinkinjava.unit1;

 

public class Shape {

    public void move(Shape shape){

        System.out.println(shape.getClass().getName()+", move ...");

    }

    public void draw(Shape shape){

        System.out.println(shape.getClass().getName()+", draw ....");

    }

    

    public void doStuff(Shape shape){

        shape.move(shape);

        shape.draw(shape);

    }

    

}

复制代码

这里规定了,通用的形状所具有的方法。

 

写一个Circle继承我们刚刚写的Shape:

 

package com.thinkinjava.unit1;

 

public class Circle extends Shape {

    

}

什么都没做,就是衍生了一个基础类(Shape)。

 

然后写一个main方法:

 

复制代码

package com.thinkinjava.unit1;

 

public class Main {

    public static void main(String[] args) {

        Circle circle=new Circle();

        circle.doStuff(circle);

    }

}

复制代码

这样,实现上转型,即是书中说的 “上溯造型”。

 

这里的Circle circle=new Circle()可以写成Shape circle=new Circle(),一样的。但是后者很容易让人迷糊。

 

运行结果为:

 

com.thinkinjava.unit1.Circle, move ...

com.thinkinjava.unit1.Circle, draw ....

 

这个结构很鲜明,就是在方法中传递基础类类型,放入的参数类型,必须是继承自该基础类的。

 

说实话,这个技术的应用场景,至今也没有接触过。书中所说的,传递该基础类作为参数类型,是为了防止传入具体子类,要重新写更多的子类代码。

 

具体更加形象的应用场景,希望有明白的,能指教一下。

 

 

 

除非注明转载,其他文章均为作者原创,可以自由转载,但请注明转载的本文的地址,请尊重作者的劳动成果。

点击复制链接 与好友分享!回本站首页
相关TAG标签 手记
上一篇:javaweb学习总结(十九)——JSP标签
下一篇:一个关于 UIPickerView 的 bug
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站