[Java]Java学习笔记(三)——类的基本语法(二)

来源:互联网 发布:网络阅卷软件 编辑:程序博客网 时间:2024/06/07 11:26

基本要点

1、在 Java 中使用 extends 表示继承。所有的继承都是公有继承。
2、在子类中可以通过 super 关键字调用超类(父类、基类)的成员函数或构造函数,格式分别是 super.menberFunction(...)super(...)
3、如果不希望某个类被继承,则应该标注为 final,同时类的成员方法也会被自动当作是 final(此时类不再支持动态绑定,可以被内联化);
如果不希望类里的某个方法被子类覆盖,则应该标注为 final;
4、与 C# 相同,Java 也不支持多继承。
5、上行转换时安全的,在 Java 里不需要强制类型转换,
下行转换常常是不安全的,如果是显示地将超类转换为子类,会抛出 java.lang.ClassCastException 异常。

Base[] b = new Base[10];Derive[] d = (Derive[]) b;

如果是间接地用超类覆盖子类数组中的某一个,会抛出 java.lang.ArrayStoreException 异常。

Derive[] d = new Derive[10];Base[] b = d;b[0] = new Base();

6、子类方法覆盖基类方法时,子类方法的访问权限不得比基类方法的访问权限高。
7、obj instanceof Class 关键字可以用于判断 类对象 obj 是否是 类 Class 或其子类的实例。
如果不是,则返回 null。
8、使用 Abstract 声明一个类为抽象类。也可以声明某个方法为抽象方法(纯虚函数)。抽象类不能有实例。
9、如果超类的某个成员需要让子类访问,那么该成员可以声明为 protected。与其他语言有所差别的是,protected 成员对所有子类都可见。

Object 类的 clone 函数就是 protected 属性。

基本上所有使用到 protected 属性成员的类都是类层次关系不良设计的结果。

10、getClass() 方法可以获取存储类信息的 Class 变量,用于判断两个实例的类类型是否相同。

Class 是 Java 用于存储运行时类型(包括接口名)信息的类,最常用的成员方法时 getName,获得类型名称。

还可以使用 forName(String) 通过字符串获得对应的 Class 变量,其中 string 为对应类型的名称或含包路径的名称:

String className = "java.util.Data";Class cl = Class.forName(className);

也可以使用 Type.Class 获取 类型 Type 的 Class 变量。

Class 中还提供了成员函数 newInstance 用于创建类实例。

事实上,这部分是反射里的内容,暂时不讲了。

11、接口:Java 里使用 implements 关键字来表示实现了某个接口,比如 Comparable、Cloneable等。

12、Java 里的模板不需要使用关键字,直接在 <> 里说明即可。

关于 Java 的内部类和反射以后再说。

0 0