复用类
复用类的两种方法:
第一:在新的类里直接创建旧的类的对象。这是“合成”
第二:创建一个新的类,与原来那个类同属一种类型的类。它全盘接受旧类的形式,在没有对它做修改的情况下往里面添加了新的代码。这是“继承”
合成和继承在做法上有许多相似之处。
基类的初始化
要创建一个派生类的对象已经不是一个类的事情了,它会牵涉到两个类---基类和派生类。当我们要创建一个派生类的对象的时候,我们不仅要初始化派生类,基类子对象的正确初始化也是非常重要的,而且也只有一个办法能保证这一点:调用基类的构造函数来进行初始化,Java会让派生类的构造函数自动地调用基类的构造函数。下面这段程序就演示了它在三级继承体系下是如何运作的:
---------------------------------------------------------------------
public class Art
{
Art(){
System.out.println("Art constructor");
}
};
class Drawing extends Art
{
Drawing(){
System.out.println("Drawing constructor");
}
}
public class Cartoon extends Drawing
{
public Cartoon(){
System.out.println("Cartoon constructor");
}
public static void main(String[] args){
Cartoon x = new Cartoon();
}
};
运行cartoon后台打印出的数据是:
Art constructor
Drawing constructor
Cartoon constructor
-----------------------------------------------------------------
Protected
在理想得情况下private关键词已经够用了,但是在实际的项目中,我们有时会碰到要让一些东西对外部世界隐藏,但是却要对它的继承类开发,protected关键词就是这种实用主义的体现。
最好的做法是,将数据成员设成private的;你应该永远保留修改底层实现的权利,然后用protected权利的方法来控制继承类的访问权限;
Final关键词
Final的三种用途:数据,方法,类
Final的数据: 在java中定义final常量时,其类型必须是primitive型的。
Final 是在创建对象的时候进行初始化的;
Static final 是在装载类的时候初始化的;
Public class FinalTest(){
Private static Random rand = new Random();
Private final int VAL_ONE = rand.nextInt(20);
Public static final int VAL_TWO = rand.nextInt(20);
Public static void main(String[] args){
FinalTest t1 = new FinalTest();
FinalTest t2 = new FinalTest();
System.out.println(“t1.VAL_ONE=”+ t1.VAL_ONE);
System.out.println(“t2.VAL_ONE=”+ t2.VAL_ONE);
System.out.println(“t1.VAL_ TWO =”+ t1.VAL_ TWO);
System.out.println(“t2.VAL_ TWO =”+ t2.VAL_ TWO);
}
}
//结果:
t1.VAL_ONE 和t2.VAL_ONE的值不同
t1.VAL_ TWO和t2.VAL_ TWO的值相同
类的装载:总的莱说“类的代码会在它们第一次使用的时候装载”.(类的装载通常都发生在第一次创建那个类的对象的时候)
多态
除了static和final方法(private方法隐含有final的意思),java的所有的方法都采用后绑定。也就是说,通常情况下你不必考虑是不是应该采用后绑定—它是自动的。
Class Shape{
Void draw(){};
Void erase(){};
}
Class Circle extends Shape{
Void draw(){
System.out.println(“Circle.draw()”);
}
Void erase(){
System.out.println(“Circle.erase()”);
}
Public static void main(){
Shape shape = new Circle();//1
Shape.draw();//2
}
}
注释1: 上传,这里先创建了一个circle对象,马上就把它的reference赋给了shape。看上去这是一个错误(一种类型怎么能赋值给另一种呢);但是由于circle是由shape派生来的,circle就是一种shape,因此这样做正确。
注释2:可能你认为,这次应该调用shape的draw() 了吧,但是由于实现了后绑定(多态型),实际上它会调用circle.draw();
结论:只有非private的方法才能被覆写。但是你得留意那些看上去就想是在覆写private方法的程序。它们不会产生编译错误。但是很可能会不按你的计划运行,说的再彻底一些,别用基类的private方法的名字去命名派生类的方法。
抽象类和抽象方法
当你想要通过一个公共的接口来操纵一组类的时候,就可使用抽象类了。
继承的前提是你能看到基类,并且还能访问它的public和protected成员
清理:派生类编写dispose()(清理方法)的时候,第一件事就是调用基类的dispose().因为不这样做,基类就得不到清理。清理的顺序和初始化的顺序相反。
一个好的构造函数应该,“用最少的工作量把对象的状态设置好,而且要尽可能的避免去调用。”。构造函数唯一能安全调用的方法,就是基类的final方法(这一条也适用private方法,因为它自动就是final的)它们不会被覆写,因此也不会产生意外的行为。
分享到:
相关推荐
### Java编程思想读书笔记 #### 一、Java与C++的区别及内存管理 在学习Java的过程中,我们常常会拿它与C++进行比较。这两门语言虽然有着相似之处,但也有许多不同点。 1. **内存管理:** - C++提供了更为底层的...
在讨论Java编程思想学习笔记时,首先需要了解的是Java语言的平台无关性,而这一特性正是通过Java虚拟机(JVM)得以实现的。JVM作为Java程序设计的关键组成部分,对于Java开发人员来说是必须掌握的基础知识。在该学习...
java编程思想的笔记。是别人的学习笔记。
读书笔记:java编程思想学习
JAVA学习笔记是面向对象编程语言的学习笔记,涵盖了JAVA的基本概念、面向对象编程思想、类和对象的概念、实例变量和局部变量的区别、方法的定义和调用、类型转换、精度问题、移位问题、switch语句的使用等内容。...
《Java编程思想》是 Bruce Eckel 的经典之作,这本书深入浅出地介绍了Java语言的核心概念和技术,对于初学者和有经验的程序员来说都是极好的学习资源。以下是对书中的主要知识点进行的详细解读: 1. **Java语言基础...
以上只是Java编程思想笔记中的冰山一角,深入学习还包括网络编程、数据库连接、JVM内存模型、垃圾回收机制、并发编程高级话题、Spring框架等内容。这些知识点构成了Java开发者必备的基础知识体系,通过不断学习和...
Java JDK 6学习笔记是为Java初学者量身定制的一份宝贵资料,它涵盖了Java编程的基础概念、语法以及核心特性。这份PPT简体版旨在帮助读者快速掌握Java开发的基本技能,逐步成为一名合格的Java程序员。 Java JDK...
《Java编程思想笔记》是基于 Bruce Eckel 的经典著作 "Thinking in Java" 所做的学习总结,这本书深入浅出地介绍了Java语言的核心概念和技术。在本文中,我们将围绕Java编程的一些关键知识点进行深入探讨,包括但不...
### JAVA编程思想笔记 #### 一、编程语言与Java特性 1. **编程语言类别**: - **机器语言**:直接与硬件交互的语言,由0和1组成。 - **汇编语言**:接近机器语言,使用助记符表示指令。 - **高级语言**:更接近...
读书笔记:学习Java编程思想
对于那些想要提升Java编程技能的开发者来说,这本书是不可多得的参考资料。 总的来说,《Java JDK 8学习笔记》是一本全面覆盖Java 8新特性的指南,它通过深入浅出的讲解和丰富的实例,帮助读者掌握Java 8的核心概念...
从标题“java核心思想读书笔记”和描述可以看出,这份资料是作者结合《Java核心思想》一书和其他网络资源整理而成,适合不同水平的Java学习者,特别是初学者和有经验的工程师。 1. **Java的设计目标** - 不同于...
读书笔记:studyThinkOnJava8学习java编程思想基于java8
### Java编程思想笔记知识点概述 #### 第 1 章 对象导论 在这一章节中,主要介绍...以上内容概括了《Java编程思想笔记》中的核心知识点,涵盖了Java语言的基础到高级特性,适合初学者和有一定经验的开发者参考学习。