1: 关于控制符的使用:
* 类的绝大部分Field 都应该使用private修饰,只有一些static 修饰的,类似全局变量的Field才考虑
使用public 修饰,所以不要动不动就整 public,此外,有些方法只是用于辅助该类的其他方法,这些方法
被称为工具方法,工具方法也应该用private 修饰。
* 如果某个类主要用作其他类的父类,该类里包含的大部分方法可能仅希望被其子类重写,而不想被外界
直接调用,则应该使用protected 来修饰。
* 希望暴露出来给其他类自由调用的方法应该使用public来修饰,因此类的构造器通过使用public 修饰,从而允许在其他
的地方创建该类的实例。
2: java 的常用包:
* java.lang 这个包下包含了java的核心类,如String Math System 和 Thread 类等,使用这个包无需使用import 语句导入,
系统会自动导入
* java.util 这个包下包含java的大量的工具类、接口和集合框架类、接口,例如Arrays List Set
* java.net 这个包是java网络编程相关的类和接口。
* java.io 这个包是输入和输出相关的类和接口。
* java.text 这个包包含了了一些java 格式化相关的类。
* java.sql 这个包包含了java 进行JDBC 数据库编程的相关类和接口。
* java.awt 抽象窗口工具集,主要用于构建GUI界面。
* java.swing 包含了Swing 图形用户界面编程的相关类和接口。这些类是轻量级的,用于构建和平台无关的GUI程序。
3: 子类 和父类 :
如果在子类中定义了与父类已有变量同名的变量,那么子类中定义的变量会 隐藏 父类中定义的变量。注意不是完全覆盖,
因此系统在创建子类对象时,依然会为父类中定义的、被隐藏的变量分配内存空间。
所以: 为了在子类中能够访问到父类中定义的、被隐藏的实例变量。或者为了在子类中访问父类中定义的、被隐藏的方法,
可用通过super. 在达到访问的目的。
4: 子类构造器调用父类构造器的集中情况:
* 子类构造器执行体的第一行使用super 显示调用父类的构造器,系统将根据super 传入的实参列表调用父类对应的构造器。
* 子类构造器执行体的第一行使用this 显示调用本类中的重载构造器,系统根据this 调用里传入的实参调用本类中的另一个构造
器,而在这个构造器中会调用父类的构造器。
* 子类构造器执行体中既没有super 调用,也没有this 调用,系统将会在执行子类构造器之前,隐士调用父类无参的构造器。
5: instanceof
instanceof 和 (type ) 是java 提供的两个相关的运算符,通常先用instanceof 判断一个对象是否可以强制类型转换,
然后才使用(type) 进行强制类型转换,从而保证程序不会出现错误。
6: 设计父类应该遵守如下规则:
* 尽量隐藏父类的内部数据,不要让子类直接访问父类的field
* 不要让子类可以随意访问修改 父类的方法。
* 尽量不要在父类构造器中调用将要被子类重写的方法。 否则可能引起空指针异常。
7: 抽象类和抽象方法:
* 抽象类必须使用abstract 来修饰,抽象方法也必须使用abstract来修饰,抽象方法不能有方法体。
* 抽象类不能被实例化。
* 抽象类可以包含 Field 方法 构造器 初始化块 内部类 枚举类 6部分,抽象类的构造器不能用于创建实例,主要用于被其子类调用。
* 含有抽象方法的类只能被定义为 抽象类。
8: abstract 关键字使用注意点:
* final 修饰的类不能被继承,final 修饰的方法不能被重写,所以 final 和abstract 永远不能被同时使用。
* 当使用static 修饰一个方法时,表明这个方法属于这个类本身,如果将该方法定义为抽象方法,则将导致通过该类
调用该方法是出现错误(调用一个没有方法体的方法肯定会出错)
因此 static 和abstract 不能同时修饰某一个方法,即没有所谓的类抽象方法。
9: 接口注意:
* 对于接口定义的方法,他们只能是抽象方法,因此系统会自动为其增加abstract 修饰符,
由于接口里的方法全部是抽象方法,因此接口里不允许定义静态方法,即不可以使用
static 修饰接口里定义的方法。
* 不管接口里方法是否用public abstract 来修饰,默认都采用public abstract 来修饰。
|
|