Java继承中方法的覆盖和重载
继承里,子类可以改写从父类拿来的方法:名称、返回值类型、参数列表都相同,功能却不同。这就叫覆盖(override)。参数列表(类型、个数、顺序)有一项不同,就不再是覆盖,而可能构成重载(overload)。 覆盖不会把父类方法从内存里删掉,只是对子类实例暂时隐藏。子类里要调用被盖住的父类版本,用 s…
继承里,子类可以改写从父类拿来的方法:名称、返回值类型、参数列表都相同,功能却不同。这就叫覆盖(override)。参数列表(类型、个数、顺序)有一项不同,就不再是覆盖,而可能构成重载(overload)。 覆盖不会把父类方法从内存里删掉,只是对子类实例暂时隐藏。子类里要调用被盖住的父类版本,用 s…
同一个类里,多个方法可以同名,只要参数列表不同,这叫方法重载(method overloading)。参数列表也叫参数签名:类型、个数、顺序,有一项不同就算不同。只改参数变量名不算。 重载是面向对象的基本能力:同一套操作名,按参数选出合适的实现,少造一堆意义相近却名字不同的方法。 一、同名不同参 p…
继承是类与类之间的关系,和现实里「儿子继承父亲财产」类似:一个类从另一个类拿到方法和属性。若 B 继承 A,B 就拥有 A 里可被继承的成员。 语法用 extends。Java 类是单继承:一个类只能有一个直接父类。多个类型可以靠接口来组合,接口之间可以多继承。 一、从 People 到 Teach…
Java 里变量的作用域可以分成四级:类级、对象实例级、方法级、块级。能看见谁、活多久,全由定义位置决定。 类级变量用 static 修饰,有时被俗称为「全局变量」——其实它属于类,不叫真正的全局。类加载后就占内存,用类名就能访问,不必先 new。对象实例级就是成员变量,必须先实例化才分配、才能用。…
Java 用修饰符控制类、属性和方法的访问权限以及其他能力,通常写在语句最前面。例如: public class className { // body of class } private boolean myFlag; static final double weeks = 9.5; prote…
Java 是面向对象语言,围绕类和对象组织代码。常见概念还有实例、方法、属性、消息、封装、继承、多态、抽象。本节只把对象和类讲清楚。 对象是类的一个实例,有状态和行为。一条狗是对象:状态可以是颜色、名字、品种,行为可以是摇尾巴、叫、吃。类则是模板,描述这一类对象共有的行为和状态。 一、现实对象和软件…
Java 是强类型语言:声明变量必须写明数据类型。变量占一块内存,不同类型占的大小不同。 基本类型一共 8 种:4 种整型、2 种浮点型、1 种字符型、1 种布尔型。它们之间可以自动提升,也可以强制转换,但强制转换可能丢精度。 一、八种基本类型 整型日常用 int;特别大的数用 long(原文用「投…
String 的值不可变,每次操作都会生成新对象,既慢又费内存。 StringBuffer 同样表示字符串,但内部实现不同:修改时尽量在原缓冲区上动手,不急着造新对象,内存上通常优于 String。 StringBuffer 默认分配 16 个字符的缓冲区,内容超出时自动扩容,而不是每次都换一个全新…
从表面上看,字符串就是双引号之间的数据,例如「极客之家」、「https://ai.zhousir.top」。写起来像 int、float 一样方便,但它其实是 java.lang.String 类的对象。 把 String 用明白,关键就两件事:怎么声明,以及为什么「改一个字符串」其实是在得到一个新…
学 Java / Android 之前,先把环境变量和 JDK 搞清楚:系统怎么找到 java / javac,以及 JAVA_HOME、PATH、CLASSPATH 各管什么。 一、先理解什么是环境变量 以 Win7 为例:单击「开始」,在搜索框输入 cmd,进入 DOS 命令行。在任意目录敲 Q…