在Java中,多重继承是不允许的,也就是说,每一个类最多只能有一个父类。如果想实现多重继承可以通过实现多个接口来达到目的。 不过,貌似有个问题出来了。我们知道,Object是每个Java类的父类,每个类都继承自Object类。但是我们仍然可以自己定义一段继承代码,就像: class A extends B 这样是完全没有错误的。此时,A就有了两个父类,一个是Object,另一个是B。这不是与每个类只能有一个父类矛盾了吗? 其实,Object类是所有其他类隐藏继承的,也就是implicitly inherit。我们也不...
Java中的向上转型,说得简单点就是把基类看成是父类。这样说应该不难理解。例如,在经典的Shape类中,Circle和Square均继承自Shape。我们可以说,一个Circle是一个Shape,一个Square也是一个Shape。这就是is-a关系。Shape能做的事情,Circle和Square也能做。先看下面的这段代码:
package src;
public class A {
public static void main(String[] args) {
Circle1 c = new Circle1();//可替换为Shape1 ...
这两天在学习JSF Tutorial上的自定义组件,发现一个方法以前一直没用过,即String.format()方法。刚开始不怎么懂,后来边看程序边看API文档,明白了一些。 我们先来看下API文档中关于此方法的说明:
formatpublic static String format(Locale l,
String format,
Object... args)
使用指定的语言环境、格式字符串和参数返回一个格式化字符串。
...
这篇文章是放在论坛首页的,一直没去看。今天看了下,觉得写得真的非常不错,很清晰,把这两个概念介绍得很详细,特意收藏,并强烈推荐给大家。原文如下:
在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进 行抽象类定义时对于abstract class和interface的选择显得比较随意。其实,两者之间还是有很大的区别的,...
昨天又看了下《Java核心技术》第二卷讲集合类这里,上来说说。 ArrayList和LinkedList,这是Java中的动态数组和链表。动态数组其实比较简单,就是一个长度可以根据实际情况改变的数组。我们如果要查找某一个动态数组中的元素,可以通过get()方法来查找,只要知道该元素下标就可以了。 而LinkedList,也就是链表,这个与我们所知道的一般链表稍有不同。一般的链表元素中,除了放这个结点的数据外,还指向下一个结点。一个指向下一个,就这样构成了链表。但是Java中的链表,除了放本来的数据和指向下一个结点外,还指向上一个结点。因此,Ja...
记得当初学集合类的时候,被那么多的接口搞得晕头转向的,刚开始根本就不清楚他们的区别以及如何使用他们。现在回过头来看看,发现比以前清晰了,这里简单说下。 首先为什么有集合类?数组大家肯定都知道是干嘛的。Java里面,数组的长度是不能改变的,也就是说,如果在初始化一个数组的时候,它的长度是确定了的,那么以后就再也不能改变了。有时候这会带来不便,也许你要运行之后才能知道实际需要的数组长度呢?因此便有了Java的集合类。 这里先分清楚Collection和Collections的区别。Collection(没有"s")是指一组接口,里面声明了一些方法;...
1、FACTORY?追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。 2、BUILDER?MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它...
今天在复习的时候看到了这个,上来说说。 继承是面向对象编程的重要组成部分。可以通过继承,构建一个新的类,从而获得父类的变量和方法,实现对父类的复用。这里,复用一般指两个方面。一是继承父类然后覆盖掉其中的一些方法,二是复用父类的代码来完成一些事务处理。而合成,简单点说,就是在一个新的类里面创建一个已有类的对象,通过这个对象来调用已有类的方法来完成任务。 也许有人看到了在Java中,鼓励使用合成而不是继承。为什么呢?首先,是因为继承破坏了面向对象编程的另一个特点--封装性。继承使父类和子类之间的耦合度增强。第二,如果一旦父类需要修改,那么子类也等于...
equals()本来是用来比较两个引用是否是指向同一对象的,不过要注意的是,不只在String类被覆盖了,在基本类型的包装类也被覆盖了。在这些类里面,该方法是用来比较对象内容是否相同的。
Boolean a = new Boolean(true);
Boolean b = new Boolean(true);
System.out.println(a==b);//结果为false
System.out.println(a.equals(b));//结果为true
如果是你自己创建的类,而且没有覆盖掉equals()方法,那么该方法就是用来比较引用是否指向同一个对象的。覆盖equ...