为什么说JAVA中要慎重使用继承   这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两个无法回避的缺点: 打破了封装性,子类依赖于超类的实现细节,和超类耦合. 超类更新后可能会导致错误. 继承打破了封装性 关于这一点,下面是一个详细的例子(来源于Effective Java第16条) public class MyHashSet<E> extends HashSet<E>…
Java中的集合(十二) 实现Map接口的WeakHashMap 一.WeakHashMap简介 WeakHashMap和HashMap一样,WeakHashMap也是一个哈希表,存储的也是键值对(key-value)映射,且键值都可以为null. 不过WeakHashMap的键是“弱键”.在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除.更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后…
原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明为static的方法有以下几条限制: 它们仅能调用其他的static 方法. 它们只能访问static数据. 它们不能以任何方式引用this 或super. 无论是static修饰的变量,还是static修饰的方法,我们都知道他们是属于类本身的,不是属于某一个对象的,当声明一个对象时,并不产生sta…
面试题: 1.HashMap和Hashtable的区别? HashMap:线程不安全,效率高,键和值都允许null值 Hashtable:线程安全,效率低,键和值都不允许null值 ArrayList代替Vector HashMapd代替Hashtable 2.List,Set,Map等接口是否都继承自Map接口? List,Set是继承自Collection接口 Map是Map的顶层接口 3.Collection和Collections的区别? Collection:是单列集合的顶层接口,有两…
可以. 接口是常量值和方法定义的集合.接口是一种特殊的抽象类. java类是单继承的.classB Extends classA java接口可以多继承.Interface3 Extends Interface0, Interface1, interface…… 不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承那一个呢? 但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口. 注意: 1)一个类如果实现了一个接口,则要实…
封装 在如何理解面向对象这篇文章中,提到所谓的封装就是"功能都给你做好了,你不必去理解它是怎么写出来的,直接使用即可.".但你得清楚一点,那就是这句话是相对于使用者来说的,而作为开发者,封装就得我们自己来干. 那么作为开发者,我们应该如何去封装呢?其实你应该反过来问,他们应该如何去使用,这样一想会简单很多,作为使用者,自然是希望越简单越好,也就是说,一些复杂的东西,我们不应该让使用者去操作,那也就是说我们应该把复杂的,以及不必要的参数给它封死,不让使用者去操作. 为什么不让使用者去操作…
结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 原因: 1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用.如果子类里面定义了静态方法(编译器认为这时子类自己定义的一个新方法,此时父类静态方法隐藏)和属性(子类中无法定义相同签名的非静态方法,编译器会报错,因为无法重写),那么这时候父类的静态方法或属性称之为"隐藏".如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否…
Java中有一些特殊的类,在教材中讲解的不深,但是确实非常有用的,这里总结一下,里面用到的有网上搜到的内容,这里表示下感谢. 一.成员内部类 成员内部类是在一个内中定义的另外一个类,这个类属于其上的类的成员,叫做成员内部类.可以把该类看做是一个成员,可实例化的成员.该类主要作用是代替结构体功能,当一个类使用到的某个成员是一个结构类型,但是该结构又没有通用性,此时就可以声明为内部类,这样便解决了结构体的问题. 注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类.对于一个名为out…
1.继承关系图 2.Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素而另一些不行.一些能排序而另一些不行.Java  SDK不提供直接继承自Collection的类,Java  SDK提供的类都是继承自Collection的“子接口”如List和Set. 所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一…
关于集合的体系是每个人都应该烂熟于心的,尤其是对我们经常使用的List,Map的原理更该如此.这里我们看这张图即可: 1.List.Set.Map是否继承自Collection接口? List.Set 是,Map 不是.Map是键值对映射容器,与List和Set有明显的区别,而Set存储的零散的元素且不允许有重复元素(数学中的集合也是如此),List是线性结构的容器,适用于按数值索引访问元素的情形. 2.阐述ArrayList.Vector.LinkedList的存储性能和特性. ArrayLi…
有的时候在面试时会被问到Comparable<T>和Comparator<T>的区别(或者Java中两种排序功能的实现区别). 1) 在使用普通数组的时候,如果想对数据进行排序,可以调用java.util.Arrays.sort().但要通过该方式对数组进行排序,还需要数组中的对象实现Comparable<T>接口. package org.lyk.entities; public class Book implements Comparable<Book>…
在实际应用中,我们往往有需要比较两个自定义对象大小的地方.而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我们一般都是根据这些属性对自定义对象进行比较的.所以Java中要比较对象的大小或者要对对象的集合进行排序,需要通过比较这些对象的某些属性的大小来确定它们之间的大小关系. 一般,Java中通过接口实现两个对象的比较,比较常用就是Comparable接口和Comparator接口.首先类要实现接口,并且使用泛型规定要进行比较的对象所属的类,然后类实现了接口后,还需…
1.使用final来修饰类 final表示这个类是继承树的末端,不能被继承. 2.将类的构造方法声明为private的,再提供一个static的方法来返回一个类的对象. JAVA语言要求继承时必须在构造器里的第一行来调用(call)超类(super class)的构造器. 这个是启动继承特征所必须的. 在JAVA中,我们通过调用super()这个方法来完成这个任务,它将会映射到一个超类的构造器中. 如果你没有给父类提供一个默认的构造器,那么编译器将会插入一个默认的超类构件器用来调用.当将父类的构…
一.java操作l流有关的类和接口 1.File 文件类 2.RandomAccessFile 随机存储文件类 3.InputStream 字节输入流 4.OutputStream 字节输出流 5.Reader 字符输入流 6.Writer 字符输出流 二.流的概念和作用 流是一组有顺序的.有起点和终点的字节集合,是对数据传输的总称活抽象.即数据在两设备之间传输称为流 流的本质是数据传输,根据数据传输特性,将流抽象为各种类,方便只管的进行数据操作 三.IO流的分类 1.根据处理数据类型的不同 分…
JAVA中使用到继承就会有两个无法回避的缺点: 打破了封装性,迫使开发者去了解超类的实现细节,子类和超类耦合. 超类更新后可能会导致错误. 继承打破了封装性 关于这一点,下面是一个详细的例子(来源于Effective Java第16条) public class MyHashSet<E> extends HashSet<E> { private int addCount = 0; public int getAddCount() { return addCount; } @Over…
类 如果一个类继承了两个类,但是这两个类中有相同的方法,那么子类调用方法时,无法确定应该调用哪个父类的方法. [c++是多继承的] 接口 jdk1.7  接口可以多继承,是因为当接口中是抽象方法.不存在上面的情况. jdk1.8及以后版本,接口可以写默认方法,多继承时发现有同名的默认方法,编译器会要求重写默认方法 public interface A { void fun1(); default void foo() { } } public interface B { void fun1();…
静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明为static的方法有以下几条限制: 它们仅能调用其他的static 方法. 它们只能访问static数据. 它们不能以任何方式引用this 或super. 无论是static修饰的变量,还是static修饰的方法,我们都知道他们是属于类本身的,不是属于某一个对象的,当声明一个对象时,并不产生static变量和方法的拷贝.也就是说,用static修饰的变量和方法在类加载的时候,…
前言 在看各类Java书籍或者博文的时候,总是会遇到Enumeration.Iterable和Iterator这三个接口,如果对这几个接口不是很明白的话,总会让自己看着看着就迷惑了,正好这周末,抽空把这三个接口总结一下,一扫之前的各种迷惑. Enumeration Enumeration(枚举)接口的作用和Iterator类似,但只提供了遍历Vector和HashTable类型集合元素的功能,不支持元素的移除操作. Enumeration接口声明的方法如下: 方法 描述 boolean hasM…
首先我们从C++说起, c++可以多继承.也就是一个类型 --- class,可以继承自2个以上的父类型.多继承导致一个问题,很多人知道.例如,如果类型B,类型C均继承自类型A.然后类型D继承自类型B和C.那么构造D的实例的时候,由于要调用父类型的构造方法,最终会调用两次A的构造方法.结果类型D的实例有两套祖父的数据,也就是外公和爷爷长的一模一样,以后使用的时候很麻烦.每次D要和祖父打交道,都要额外的区分到底是外公还是爷爷. 再说,内存里面出现两套一模一样的东西,一个用不上,还容易引起混乱,岂不…
. 重载与重写的区别: 重载(overload)               | 重写(override) 1 方法的名称相同,参数个数.类型不同 | 方法名称.参数列表.返回值类型与父类完全相同 2 不要求方法的访问范围   | 子类提供的重写方法的范围不能比父类中的还小 3 应用在一个类的内部 | 应用在父子类的继承关系中 . 抽象类与接口的区别: 抽象类 | 接口 1 有构造方法       | 无构造方法 2 类中的方法不一定是抽象方法     | 接口中的所有方法均为抽象方法 3 不允…
一道java 常见面试题,网上找到的几乎每个 java 面试笔试题大全或集锦里都能找到这道题. 题目如下:问: 抽象类是否可继承实体类 (concrete class) 答: 抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数答案很明确,可以继承.其实从Object就是个实体类,java的API文档里,每个抽象类的条目里都明确写着直接或间接继承自Object,所以这点是没有疑问的.关键在于这答案里所说的"前提是实体类必须有明确的构造函数"一句,是什么意思.一般学习者会写的简单试…
package com.ykmimi.javabianchengsixiang; /** * 形状的继承 随机形状生成器 * @author ukyor */ import java.util.Random; class Shape{ public void draw() {} //擦除 erase public void erase() {} } //类 圆形 继承自基类 Shape形状 class Circle extends Shape{ public void draw() {Syste…
Application:这层的职责是对接收到的数据做一些非业务性验证,事务的控制,最重要的是协调多个聚合之间的操作.这里应该可以清晰的表达出整个操作所做的事情,并且与通用语言是一致的. 以上我们讲到可以直接在一个html页面里通过引入Vue.js来直接写Vue代码,但是这样的方式并不常用.因为如果我们的项目比较大,项目中会存在很多页面,这样非常不利于后期的维护和代码的公用,也会存在实例名冲突的情况,所以我们需要用到Vue提供的技术栈来构建强大的前端项目.类是就地编译的,这意味着同一个UBluep…
实现了父类继承接口,父类实例化接口的方法,子类继承父类,子类调用父类的方法直接使用 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace sortAndArea { public interface Sort { List<int> sort(); } public interface Area { long area(); } abstract…
常用的类: BufferedReader ,BufferedWriter FileReader    ,FileWirter String      ,Integer Date        ,Class HashMap ,Object Runtime ,file Integer ,Long Thread 常用的包: java.lang java.io java.util java.sql java.swt java.math javax.servlet org.apache.struts.ac…
类 StringIntegerLong File DateThread(java.lang.ThreadThread类的定义:public class Thread extends Object implements Runnable)===========================包 java.lang.*;java.io.*;java.util.*;java.sql.*; java.math.*; =======================接口:Comparable Collect…
2.Abstract类实现接口 马克-to-win:如果实现某接口的类是abstract类,则它可以不实现该接口所有的方法.但其非abstract的子类中必须拥有所有抽象方法的实在的方法体:(当然它abstract爹的也算作是它的) If a class implements an interface, it must implement all of its methods in the interface, otherwise, this class must be an abstract…
1.何为继承?What is Inheritance? 在上图中,对于车来讲,汽车就是子类.对于汽车来讲,奔驰就是子类.车是汽车的基类,超类,或说父类.到底什么是继承?马克-to-win,子类把父类的方法和属性当成自己的一样随便用的这种现象叫继承.In OOP, the ability that subclass inherits all of the variables and methods defined in the superclass is known as Inheritance.…
public interface Icolor{ int apply(int x,int y); } public enum color implements Icolor{ plus("+"){ public int apply(int x,int y){ return x+y;} }, min("-"){ public int apply(int x,int y){ return x-y;} } ; private final String num; color…
转载,原文来自http://blog.sina.com.cn/s/blog_5f79a56a0100c6ig.html 众所周知,java中的面向对象的三大基本特征是:[封装].[继承].[多态] 一.封装         对象要有一个明确的边界:边界的划分(对象各司其职.对象的粒度.对象的可重用性)         具体来说:                 1.属性: 私有 private(提供set和get方法)                 2.方法: 公开或私有public/priv…