Part 4 : 类、继承、接口
类
基本结构:
class Person{ private static int[] password;//字段 public String name; void Hello(){//方法 System.out.println("Hello!"); } }
构造方法 :
- 与类名同名,不写返回类型
- 如无定义,将生成默认构造方法(操作为空)
- 可重载实现多态
- 可以在一个构造方法中调用另一构造方法,但是需要放在第一句
- 访问字段 : 实体.字段(类外部) / this.字段 (类方法中)
- 善用setter与getter
- 继承
- 关键字 : extends
- 本质 : E-R关系图中的is-a关系(说明此子类继承父类所有方法,字段)
- 可通过对变量重定义进行“隐藏”,也可添加新变量,访问隐藏字段 -> super.
- 可对同名方法重定义,实现覆盖(以子类为准),建议加标记@OverRide,访问覆盖方法 -> super.
- 子类可进行强制类型转换变为父类
- 包
- 本质 : 解决namespace与命名冲突问题,同一包各个类默认可以互相访问
- 引入关键词 : import
访问权限
- 分为两类:访问修饰符,其他修饰符
访问修饰符:
同一个类中 同一个包中 不同包的子类中 不同包中的非子类 private Yes 默认 Yes Yes protected Yes Yes Yes public Yes Yes Yes Yes (此修饰适用于类/类中成员)
非访问控制符
基本含义 修饰类 修饰成员 修饰局部变量 Static 静态,预分配 可以修饰子类 Yes Final 最终的,不可改变 Yes Yes Yes abstract 抽象的,不可实例化 Yes Yes - static
- 类变量可通过类名访问或实例对象访问,结果相同(本质:属于这个类)
如: System.in / System.out
- 一定程度上,可以作为全局变量表示方式
- 推荐使用类名调用,static方法中不可使用 super / this
- 类变量可通过类名访问或实例对象访问,结果相同(本质:属于这个类)
- final
- 类修饰结果:不可被继承——不会有子类
- 字段/变量修饰结果:只可赋值一次,不可被修改——只读量
- static final 可用于表示常量
- abstract
- 类修饰结果:不可被实例化
- 方法修饰:只需声明,且若类包含abstract方法,则类为abstract类(子类亦同,直至实现)
- static
接口(interface)
- 抽象:用来描述一个对象的行为特征
- 本质:使不相关类,可以有同样的方法(接口只负责描述)
- 例子:toString()
- 意义:实现了多重继承
实际上,接口可以作为一种特殊的类,在泛型操作(<list>)中,可以将接口作为一种类型,这就使得使用该接口的变量可以向上转型(又称向上转换),这就实现了另一种意义上的“继承”
(详参 Java SE Review(4) - Java内部机制 (2) : 向上转换与向下转换) - 定义结构:
[public] interface Name[extends SuperInterface]{
[returnType] methodName([paralist]);//方法
Elemtype elem = value;//常量
}
接口中的方法(Method):
- 接口中的方法具有
abstract
和public
属性 - 可以对父接口方法隐藏,进行重载
- 引用接口的类必须实现引用接口的所有声明的方法
例:
class FIFOQuene implements Name{
...
public methodName([paralist]){
...
}
...
}
接口对象可以作为引用,将其他实现接口的实例的对象存储在其中,通过这些变量可以访问类实现的接口中的方法,JAVA运行时系统动态确定使用哪个类中的方法
例:
public static void main(String args[]){
...
Name temp = new FIFOQuene();
...
temp.methondname([objlist]);
...
}
Java8以上,可以对接口中定义的方法在接口中实现,称为默认方法(关键词
default
),即:提供默认实现- 接口中的常量:
- 接口中不可以存在字段,但可以存在常量,常量被所有引用此接口的类共享,类似于C/C++中的
const
和#define
- 常量具有
public
,static
,final
属性
- 接口中不可以存在字段,但可以存在常量,常量被所有引用此接口的类共享,类似于C/C++中的
- 接口中的方法具有