Java接口(interface)的概念及使用
抽象类里可以有抽象方法,也可以有已经实现的方法;接口(interface)更“抽象”:传统上它规定一个类必须做什么,而不规定怎么做。 接口用 interface 声明,可以看成一种特殊的抽象类。Java 8 起接口也可以有 default / static 方法,Java 9 还可以有 privat…
抽象类里可以有抽象方法,也可以有已经实现的方法;接口(interface)更“抽象”:传统上它规定一个类必须做什么,而不规定怎么做。 接口用 interface 声明,可以看成一种特殊的抽象类。Java 8 起接口也可以有 default / static 方法,Java 9 还可以有 privat…
自上而下的继承层次里,越靠上的类越通用,甚至更抽象。祖先类往往只包含最基本的成员,人们只把它当作派生其他类的基类,而不会拿它来 new 对象。方法也可以只给出定义、不写实现,交给子类按具体需求去完成。 这种只有定义、没有方法体(没有 {})的方法叫做抽象方法。含有一个或多个抽象方法的类必须声明为抽象…
Java 允许在一个类(或方法、语句块)内部再定义另一个类,称为内部类(Inner Class),有时也叫嵌套类(Nested Class)。 内部类和外层类存在逻辑上的所属关系,一般只用在定义它的类或语句块里,实现没有通用意义的功能。外部引用时必须给出完整名称。 使用内部类的主要原因:可以访问外部…
Java 是面向对象语言,但八种基本类型并不带对象特性:没有属性、也不能调方法。保留它们是为了符合习惯,并让常规数值运算更简单高效。 引用类型都继承了 Object,转成字符串只要调 toString();基本类型就麻烦得多。为此 Java 给每种基本类型配了一个类,叫做包装类(Wrapper Cl…
泛型里如果不限制类型参数,它可以接受任意已定义的类型。很多时候我们只需要其中一部分,用户传入其他类型会在运行期出错。本节先限制类型参数的范围,再讲通配符 ?。 例如编写一个泛型方法,返回 Integer、Double 等数组中的最大值:元素得能取数值,就不能让 T 是任意类型。 写法 用在哪 含义 …
所谓泛型,就是“宽泛的数据类型”:不但值可以通过参数传递,类型也可以。它解决的是:既不想为每种类型写一遍重载,又不愿依赖不安全的向下转型。 Java 1.5 起引入泛型,参照 C++ 模板,本质是参数化类型(Parameterized Type)。类型参数只能表示引用类型;传入 int、double…
从功能上看,new 和 newInstance() 都能创建类的实例。前者是关键字,后者是方法。差别在于:newInstance() 走类加载机制,按运行时拿到的类名来反射创建;new 在源码里写死类型,直接创建。 为什么要两种方式?主要是软件的可伸缩、可扩展、可复用:明确知道要哪个类时用 new;…
Java 反射指:运行时对任意类都能查出全部属性和方法,对任意对象都能调用任意方法和属性。动态拿到这些信息、动态调用对象方法,就是语言层面的反射机制。 它依赖运行时由类加载器装入的 Class 对象:编译期看不到的信息都记在这份元数据里,程序才能在启动后按需装载、查看、生成对象并改写信息。远程方法调…
两个进程远程通信时,无论发送什么类型的数据,网络上走的都是二进制序列。发送方要把 Java 对象变成字节序列,接收方再把字节序列恢复成对象。 把 Java 对象转换为字节序列叫做序列化;把字节序列恢复为 Java 对象叫做反序列化。常见用途有两个:把对象的字节序列永久存到磁盘(通常是一个文件);在网…
声明类、变量和方法时可以用 final 修饰,表示终态:这个东西定下来以后就不能再改继承关系、不能再被覆盖、不能再被重新赋值。 具体规定:final 类不能被继承;final 方法不能被子类重写;final 变量(成员或局部)只能赋值一次,成为常量。 修饰对象 效果 补充 类 不能再派生子类 方法隐…