工作之余,不知道要做些什么。该做的事情都完成的差不多了,想看一下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 ....

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

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

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

think in java 手记(一)的更多相关文章

  1. JAVA手记 JAVA入门(安装+Dos下运行)

    JAVA入门特供= =,今天设置环境变量后用dos运行的时候发现出现“找不到或无法加载主类”,索性查了些资料重新看了看JAVA入门的部分. 声明:我的笔记本暂时用的是Win10系统,Windows其他 ...

  2. Java手记

    由于腾讯的MTA只有JAVA的demo,为了测试用php实现的加密算法是否正确,所有只能运行一下Java 配置环境:http://www.runoob.com/java/java-environmen ...

  3. 【java手记】------------------------java中转发和重定向区别

    转发: request.getRequestDispatcher("success.jsp").forward(request,response); 在服务器组件收到用户请求后.经 ...

  4. 设计模式课程 设计模式精讲 6-2 抽象工厂coding

    1 代码讲解 1.1 抽象工厂优点 1.2 抽象工厂缺点 1.3 为何有产品族的业务场景宜用抽象工厂设计模式?而不是工厂设计模式? 2 代码演练 2.1 抽象工厂代码演练 1 代码讲解 1.1 抽象工 ...

  5. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  6. Java小白手记2:一些名词解释

    看到<Java 征途:行者的地图> ,这是一篇有关java学习路径文章.对我等Java小白有指引作用.里面提到了一些基本的名词术语,有些我知道,有些不知道,再补上一些自己曾觉得模糊的,记录 ...

  7. 微冷的雨Java基础学习手记(一)

    使用Java理解程序逻辑 之凌波微步 船舶停靠在港湾是很安全的,但这不是造船的目的 北大青鸟五道口原玉明老师出品 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识点时,要 ...

  8. Java学习手记2——多线程

    一.线程的概念 CPU执行程序,就好比一个人在干事情一样,同一个时间你只能做一件事情,但是这样的效率实在是太低了,在你用电脑的时候,听歌就不能浏览网页,看电影就不能下载视频,你想想是不是很蛋疼. 所以 ...

  9. Java学习手记1——集合

    一.什么是集合 集合是对象的集合,就像数组是数的集合.集合是一种容器,可以存放对象(可以是不同类型的对象). 二.集合的优点(为什么要用集合) 当然,在java里,可以使用数组来存放一组类型相同的对象 ...

随机推荐

  1. 部分PR回写的数量带有小数,分别是2023工厂的纸箱104007000389,2021工厂的纸盒404002005930;

    描述:部分PR回写的数量带有小数,分别是2023工厂的纸箱104007000389,2021工厂的纸盒404002005930: 原因:所有物料规划PR时对舍入值的先后考虑逻辑影响到回写出来的temp ...

  2. 命名空间出错 namespace Web.Skin.@default

    namespace Web.Skin.default会报错 因为default是关键字/保留字,所以需要在前面加@符号; namespace Web.Skin.@default

  3. Android logcat输出中文乱码

    使用adb的logcat 命令查看系统日志缓冲区的内容,会发现在CMD的界面面,直接输出的中文内容是乱码. 这个问题出现在使用logcat将日志直接打印在当前的DOS窗口的时候会出现:使用logcat ...

  4. Clustered Index & Non Clustered Index(聚簇索引和非聚簇索引)

    每个表只能有一个聚簇索引,而能有200多个非聚簇索引. 在物理分配上, 每个表的数据都是分配在页上,一个页大概有8k左右,假设一条数据占1000字节的话,那么8000条数据占8000*1k/8k = ...

  5. 获取客户端真实IP地址

    Java-Web获取客户端真实IP: 发生的场景:服务器端接收客户端请求的时候,一般需要进行签名验证,客户端IP限定等情况,在进行客户端IP限定的时候,需要首先获取该真实的IP. 一般分为两种情况: ...

  6. uploadify 文件上传报http 302错误

    uploadify文件上传会报http 302错误,在配置文件中将处理上传的通用类取消验证, 假设上传的通用处理类是fileUpload.ashx,则在配置文件同添加下面过滤配置能解决问题. < ...

  7. Spring框架的事务管理之编程式的事务管理(了解)

    1. 说明:Spring为了简化事务管理的代码:提供了模板类 TransactionTemplate,所以手动编程的方式来管理事务,只需要使用该模板类即可!!2.手动编程方式的具体步骤如下: 1.步骤 ...

  8. DOMNodeInserted监听div内容改变

    $('.cw-icon .ci-count').on('DOMNodeInserted',function(){ $(".settleup-content .cont_loading&quo ...

  9. PAT 1072 开学寄语(20)(代码+思路)

    1072 开学寄语(20 分) 下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面.理发.整衣, ...

  10. KbmMW 4.50.00 测试版发布

    We are happy to announce the release of kbmMW v. 4.50.00 Beta Professional and Enterprise Edition wi ...