我们在编程过程中经常使用代码复用,其中主要有两种方式:组合与继承。
组合:即在编程中直接将某个类引入到新类中作为新类的field。
继承:子类继承了父类,就会自动获取到父类的field和方法(public和protected等)。
在学习的过程中发现了以下一个以前不曾注意的点:
①一个程序中含有多个类,每个类都可以具有自己的main方法,其他的类也可以相互调用main方法,看作普通的静态方法即可,而且更加方便进行测试。
②子类调用父类构造方法是,必须放在子类构造方法的起始位置。
③静态方法中不能使用非静态的成员变量或者方法。
这是由于使用static标注的field或者方法,表示其属于这个类,而非类的实例,而非静态的成员变量从属于类的实例,这样如果可以使用话,静态的方法并不会知道这些变量为哪个实例的变量,必然会出错。而且在静态方法中也不能使用 this 和 super。
④在子类重写父类方法时使用@Override标注该方法,可以防止误操为对父类方法的重载。
⑤组合与继承如何选择?
最简单的方法就是如果关系为"is-a"使用继承,"has-a"使用组合。
另一个判断的依据为:我们需不需要从子类向父类进行向上转型操作,如果必须向上转型则使用继承,否则不必使用。
⑥继承中类的初始化顺序
public class Beetle extends Insect { private int k = printInit("Beetle.k initialized"); private String z; public Beetle(int k, String z){ this.z = z; this.k = k; System.out.println("j = " + j); System.out.println(z); } private static int x2 = printInit("staitc Beetle.x2 initialized"); public static void main(String[] args) { System.out.println("Beetle constructor"); Beetle b = new Beetle(3,"Beetle.z"); } } class Insect{ private int i =9; protected int j; public Insect() { System.out.println("i = " + i + ", j = " + j); j = 39; } private static int x1 = printInit("static Insect.x initialized"); static int printInit(String s){ System.out.println(s); return 47; } }
输出:
static Insect.x initialized
staitc Beetle.x2 initialized
Beetle constructor
i = 9, j = 0
Beetle.k initialized
j = 39
Beetle.z
java程序开始试图访问main方法,开始加载Beetle的编译代码,发现存在父类后,对父类进行加载,初始化(最先初始化static 的field)。然后对Beetle类建立对象
可以看出初始顺序:先对field进行初始化而后在执行构造方法。
⑦关于基类与子类
继承并不只是复制了基类的接口,当我们创建一个子类的对象时,该对象包含了一个基类的子对象(我想是super),这个子对象与直接使用基类创建的对象时一样的,只不过基类的子对象被包装在子类对象内部。
相关推荐
包含java常用的代码,可以直接拷贝。减少代码编写工作量。
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
java经典例题解析,包含答案,分析,代码以及详细的注释,适合初学者快速学习以及了解java循环,嵌套,遍历控制输出等基础流程,并可以在此基础上代码复用,完成其他相关的程序设计,是初学者编程指导的不二选择。
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
JFrame降低了软件开发人员的要求,开发人员也无需掌握太多的编程知识,只需掌握Java与JavaScript基础知识,就可在平台上进行二次开发。TJFrame的目标是:“直接降低软件企业80%的研发成本,缩短项目开发发周期,...
JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接 的交互。 3. JAVA 集合 集合类存放于 ...
2. 继承:可以复用代码,缩短开发周期,节约成本 就是扩展已有类的功能,在继承中分为子类和父类;父类有时候又称为 超类,子类有时候成为派生类;extends 继承类限制:在使用继承类的时 候虽然可以扩充类的功能,...
1 JAVA SE 1.1 深入JAVA API 1.1.1 Lang包 1.1.2 集合类 1.1.2.1.1 日期类Date 1.1.2.1.2 日历类Calendar 1.1.2.1.3 随机数类Random 1.1.2.1.4 向量类Vector ...4.1 代码复用的规则 4.2 Java IO 包中的Decorator模式
1,提高了代码的复用性。 2,让类与类之间产生了关系。有了这个关系,才有了多态的特性。 注意:千万不要为了获取其他类的功能,简化代码而继承。 必须是类与类之间有所属关系才可以继承。所属关系 is- a。 Class ...
承也实现了代码的复用,使程序的复杂性线性地增长,而不是呈几何级数增长。 2.2.6 抽象 面向对象的程序设计系统鼓励充分利用"抽象"。在现实世界中,人们正是通过抽象来 理解复杂的事务。例如:人们并没有把...
2.3.4 Java代码中的注释23 2.3.5 常见错误解析24 2.4 Java类库组织结构和文档27 2.5 Java虚拟机简介28 2.6 Java技术两种核心运行机制29 2.7 上机练习30 第3章 3.1 变量32 3.1.1 什么是变量32 3.1.2 为什么需要变量32...
java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....
java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....
java中的继承机制之所以能够降低程序的复杂性,提高程序的效率,主要因为它使代码可以重用或复用,这里面有大量的题,特别适合学生
打造高效代码结构(java性能优化) 新版本通俗易懂_观察者模式递进时讲解 ibatis连接数据库 高并发之单(多)生产者消费者线程 高并发复用数据库链接技术详解之数据库连接池 类加载器的高级特性(自定义类加器实现加密...
创建DAO对象的优点主要体现在提高代码复用和降低业务逻辑操作与业务实体持久化之间的耦合。 DAO对象一般都包括CRUD动作,如果在一个应用中,大量的重复定义这些CRUD方法,会占用大量的开发时间及测试时间,那在这一...
本章是Java基础的方法概念详解,分享给初学者,一起学习,共同进步! 文章目录一.方法基础概念二.方法的分类三.方法的调用格式四.方法的重载五.拓展 一.方法基础概念 什么是方法 Java的方法类似于其它语言的函数,...
里克 我的Java摘要。
创建DAO对象的优点主要体现在提高代码复用和降低业务逻辑操作与业务实体持久化之间的耦合。 DAO对象一般都包括CRUD动作,如果在一个应用中,大量的重复定义这些CRUD方法,会占用大量的开发时间及测试时间,那在这一...