`

java编程思想笔记(五)类复用(代码复用)和多态

阅读更多

1.代码复用的方式:

 

(1)类组合 

如一个 喷水系统,需要用到水资源.

 

 class WaterSource {
private String s;
//水资源
WaterSource() {
System.out.println("WaterSource()");
s = new String("Constructed");
}

//喷洒系统
public class SprinklerSystem {
 
WaterSource source = new WaterSorce();
}

 实际就是一个新类里引用很多其它类,这些类低耦合,高复用.

 

 

(2)类继承

衍生类继承父类,衍生类既可以使用父类的方法,又能扩展新的方法.(java面向对象三大特性之一)

注意: 

创建衍生类的一个对象时, 它在其中包含了父类的一个“子对
象”。这个子对象就象我们根据基础类本身创建了它的一个对象。从外部看,基础类的子对象已封装到衍生
类的对象里了.

所以,会一层一层的 “从上往下“ 调用父类的构造器,直到上面没父类了。

若衍生类构造器和父类构造器的 变量 不一样,会报错.解决方法是创建相同的构造器,或在衍生类中用super(xx)引用到父类某个构造器

 

p r o t e c t e d  关键字

若变量或方法用protected关键字,只能通过同一个包的类或继承才能使用到.

 

 

(3)组合和继承一起用

 

class Plate {
Plate(int i) {
System.out.println("Plate constructor");
}
}
class DinnerPlate extends Plate {
DinnerPlate(int i) {
super(i);
System.out.println(
"DinnerPlate constructor");
}
}
class Utensil {
Utensil(int i) {
System.out.println("Utensil constructor");
}
}
class Spoon extends Utensil {
Spoon(int i) {
super(i);
System.out.println("Spoon constructor");
}
}
class Fork extends Utensil {
Fork(int i) {
super(i);
System.out.println("Fork constructor");
}
}
class Knife extends Utensil {
Knife(int i) {
super(i);
System.out.println("Knife constructor");
}
}
// A cultural way of doing something:
class Custom {
Custom(int i) {
System.out.println("Custom constructor");146
}
}
public class PlaceSetting extends Custom {
Spoon sp;
Fork frk;
Knife kn;
DinnerPlate pl;
PlaceSetting(int i) {
super(i + 1);
sp = new Spoon(i + 2);
frk = new Fork(i + 3);
kn = new Knife(i + 4);
pl = new DinnerPlate(i + 5);
System.out.println(
"PlaceSetting constructor");
}
public static void main(String[] args) {
PlaceSetting x = new PlaceSetting(9);
}
} ///:

 

 

2.final关键字使用

(1)final修饰变量

       变量会设置成常数. 无论 static 还是 final 字段,都只能存储一个数据,而且不得改变。

(2)final修饰方法

       该方法不能被子类覆盖重写

 

(3)final修饰类

       类不能被继承.

 

采用 final 方法的第二个理由是程序执行的效率。将一个方法设成 final 后,编译器就可以把对那个方法的所有调用都置入“嵌入”调用里。只要编译器发现一个 final 方法调用,就会(根据它自己的判断)忽略为执行方法调用机制而采取的常规代码插入方法(将自变量压入堆栈;跳至方法代码并执行它;跳回来;清除堆栈自变量;最后对返回值进行处理)。相反,它会用方法主体内实际代码的一个副本来替换方法调用。这样做可避免方法调用时的系统开销。当然,若方法体积太大,那么程序也会变得雍肿,可能受到到不到嵌入代码所带来的任何性能提升。因为任何提升都被花在方法内部的时间抵消了。 Java 编译器能自动侦测这些情
况,并颇为“明智”地决定是否嵌入一个 final 方法。然而,最好还是不要完全相信编译器能正确地作出所有判断。通常,只有在方法的代码量非常少,或者想明确禁止方法被覆盖的时候,才应考虑将一个方法设为final。  

private修饰的方法都是自动变final,因为方法私有.

 

4. 继承初始化顺序

  昆虫和甲虫例子:

class Insect {
 int i = 9;
 int j;
 Insect() {
 prt("i = " + i + ", j = " + j);
 j = 39;
}
static int x1 =prt("static Insect.x1 initialized");
static int prt(String s) {
System.out.println(s);
return 47;
}
} 
public class Beetle extends Insect {
int k = prt("Beetle.k initialized");
Beetle() {
prt("k = " + k);
prt("j = " + j);
}
static int x2 =
prt("static Beetle.x2 initialized");
static int prt(String s) {
System.out.println(s);
return 63;
}
public static void main(String[] args) {
prt("Beetle constructor");
Beetle b = new Beetle();
}
} ///:~

 

该程序的输出如下:
static Insect.x initialized
static Beetle.x initialized
Beetle constructor
i = 9, j = 0
Beetle.k initialized
k = 63
j = 39  

 

1先初识化父类static的变量,后父类static方法,再子类static变量和方法.

2再初始化父类变量和子类变量.

3再初始化父类构造器和子类构造器.

 

多态

什么是多态?

现实中的多态:水果、人、动物,水果是一个大的种类,小的种类为香蕉,西瓜,苹果等等,把这样的一种大的种类包含很多小种类称为多态.

java中多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)

如 :接口和实现类,一个接口可以实现多个实现类,并且每个实现类可实现不同功能.

 

介绍多态更详细的文章:http://www.cnblogs.com/jack204/archive/2012/10/29/2745150.html

 

Java中默认对象引用全部是晚绑定,只有static和final类型的引用时早绑定或编译时绑定。

 

多态的优势是:

程序的可扩张性好,无论添加多少个子类,基类的接口都不用改变,只需要在子类对应方法中提供具体实现即可,也就是所谓的将程序变化的部分和程序保持不变的部分分离。降低类之间耦合度

 

注意:只有正常的方法可以使用多态,字段和静态方法没有多态机制。

 

 

 

 

0
0
分享到:
评论

相关推荐

    java编程思想读书笔记

    《Java编程思想》是 Bruce Eckel 的经典著作,这本书深入浅出地讲解了Java语言的核心概念和编程技术。这份读书笔记记录了读者在研读此书过程中的理解和体会,涵盖了从基础语法到高级特性的全面解析。以下是笔记中...

    Java编程思想笔记(全)

    ### Java编程思想笔记知识点概述 #### 第 1 章 对象导论 在这一章节中,主要介绍了Java中的基本概念——对象。对象是面向对象编程的核心,它封装了数据和行为。本章首先解释了对象的概念,接着讨论了如何创建对象...

    java 笔记, 讲解多态 面向对象

    多态是面向对象编程中的一个重要特性,它不仅提升了代码的灵活性和扩展性,还简化了程序的设计和维护。通过理解和掌握多态的概念及其在Java中的实现方式,开发者可以更好地构建高效、可扩展的应用程序。

    java编程思想读书笔记.rar

    4. **继承与多态**:继承允许一个类(子类)继承另一个类(父类)的特性,实现代码复用。多态则是子类对象可以被视为父类对象,使得程序更具通用性。Java支持单继承和接口实现多继承。 5. **抽象类与接口**:抽象类...

    java编程基础笔记

    首先,Java是一种面向对象的语言,它的核心概念包括类、对象、封装、继承和多态。类是对象的模板,对象则是类的实例。封装是将数据和操作数据的方法捆绑在一起,以保护数据不受外部直接访问。继承允许子类从父类继承...

    Java编程思想重点笔记(Java开发必看).pdf

    Java编程思想是每个Java开发者深入理解这门语言的基石,这份笔记涵盖了众多关键知识点,旨在帮助开发者提升对Java的理解和应用能力。以下是笔记中的部分核心内容: 1. **基础概念**: - **Java简介**:Java是由Sun...

    继承和多态笔记.docx

    ### 继承与多态知识点总结 ...总结而言,接口和抽象类都是为了提高代码的可重用性和可扩展性而设计的,它们共同支撑起了Java面向对象编程中的多态特性。正确理解和使用这些概念对于开发高质量的Java应用程序至关重要。

    狂神说JAVA的所有笔记.zip

    在JAVA的进阶部分,笔记可能讲解了设计模式,这是解决常见编程问题的模板,如单例模式、工厂模式、装饰器模式等,能提升代码的复用性和灵活性。同时,可能会涵盖JVM(Java虚拟机)的工作原理,包括内存管理、类加载...

    Java学习笔记(多态封装)

    例如,你可以定义一个通用的接口或抽象类(如`Animal`),然后创建多个具体的实现(如`Dog`, `Cat`, `Fish`等),这样在处理动物相关的业务逻辑时,可以使用父类或接口引用,实现代码的复用和多态调用。封装则确保了...

    尚硅谷JAVA基础笔记吐血整理

    “尚硅谷JAVA基础笔记”涵盖了Java语言的基础知识,包括语言概述、基本语法、面向对象概念、封装、继承和多态,以及一些关键概念如形参与实参、属性与局部变量、构造器、this关键字、包和MVC设计模式的使用。...

    java学习笔记markdown

    2. **面向对象编程**:深入讲解Java的面向对象特性,包括类、对象、封装、继承、多态等概念。这部分内容是Java的核心,有助于理解如何构建可维护和可扩展的软件系统。 3. **集合框架**:详细解释ArrayList、...

    王者归来之Thinking in java读书笔记

    Java是一种面向对象的编程语言,它以类为基本单位进行组织,强调封装、继承和多态三大特性。在《Thinking in Java》中,作者详细讲解了这些概念,包括如何定义类、创建对象,以及如何通过接口实现多态性。 接着,书...

    Java基础尚硅谷宋红康学习笔记

    理解封装、继承和多态是Java面向对象编程的关键概念。 3. **数组与集合**:数组用于存储固定数量的同类型元素,而集合框架(如ArrayList、LinkedList、HashSet、HashMap等)则提供了动态存储和操作对象的能力。 4....

    多态学习-什么是多态及代码

    在Java编程语言中,多态(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性是指一个接口或者类可以表现出多种形态,使得程序在运行时能够根据实际的对象类型执行相应的方法。这种特性大大...

    Java demo 算法笔记

    Java是一种面向对象的语言,其核心概念包括类、对象、接口、继承、封装和多态。学习Java首先要掌握这些基本概念,并能够熟练地创建和使用类。此外,Java的异常处理机制、垃圾回收机制以及IO流等也是开发者必须掌握的...

    大佬的java笔记

    面向对象编程的基本概念包括类、对象、封装、继承和多态,这些都是笔记可能详细解释和探讨的概念。 3. Java基础语法:包括数据类型、变量、运算符、控制流(如if、for、while等)、方法、数组等。笔记中可能会详细...

    Java开发学习笔记

    3. **继承**:一个类可以继承另一个类的属性和方法,实现代码复用和扩展。 4. **多态**:同一种行为可以有不同的表现形式,基于父类的引用可以调用子类的方法,实现动态绑定。 5. **接口**:定义了一组方法签名,不...

    Java课堂笔记txt格式

    Java编程语言是软件开发领域中的重要工具,尤其在企业级应用和互联网服务中占据着核心地位。本套“Java课堂笔记”旨在为学习者提供一个从入门到精通的全面学习路径,通过简洁明了的方式,让学习者在短时间内掌握Java...

    java笔记代码

    - **继承**:一个类可以继承另一个类的属性和方法,实现代码复用。 - **多态**:同一方法在不同子类中可有不同的实现,提供更大的灵活性。 3. **异常处理** - **异常**:程序运行时出现的问题,Java通过异常机制...

Global site tag (gtag.js) - Google Analytics