Chapter 4 Advanced Class Features

Slides:



Advertisements
Similar presentations
主要内容 Java 的常用包 Java 的常用包 “ == ” 和 “ equals ” 的用法 “ == ” 和 “ equals ” 的用法 基本数据类型与引用类型 基本数据类型与引用类型 String 和 StringBuffer String 和 StringBuffer 对象的克隆( clone.
Advertisements

面向对象与设计模式 RD 常见编程范式介绍  并行编程 - Process-orientedProcess-oriented  组件编程 - Component-basedComponent-based  事件驱动 - Service-oriented,Time-drivenService-orientedTime-driven.
面向对象程序设计 、. 第二章 面向对象的分析与设计 学习目标 1 确定系统中的对象 2 确定对象的属性及操作 3 测试对象的有效性 4 区分对象和类 5 了解面向对象的编程和过程化编程之间的区别 6 了解封装的主要好处 7 了解软件开发的主要步骤.
第6章 对象和类.
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
项目7 面向对象高级.
项目6 通用堆栈.
第16章 代理模式 Website:
四資二甲 第三週作業 物件導向程式設計.
面向对象的程序设计(一).
第一章 面向对象程序设计.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
第二章 JAVA语言基础.
第二部分 Java语言基础篇 第4章 Java语言与面向对象 (之一).
類別的繼承-一般關係: 繼承是宣告的類別繼承現存類別的部份或全部的成員資料和方法 , 新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法
Ch07 介面與多重繼承 物件導向程式設計(II).
第10讲 Java面向对象编程基础(4) 教学目标 主要内容.
JAVA程序设计 (03) JAVA Programming
第9章 单例模式 Website:
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
Ch08 巢狀類別 物件導向程式設計(II).
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
物件導向程式設計 (Object-Oriented rogramming)
Classes Lecturer: 曾學文.
CHAPTER 9 建構方法 ROBERT.
第六章 类的扩展与继承.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
辅导课程十六.
本單元介紹何謂變數,及說明變數的宣告方式。
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
创建型设计模式.
Java软件设计基础 5. 继承与多态.
面向对象程序设计 、.
第9章 類別圖與物件圖 9-1 類別圖與物件圖的基礎 9-2 類別圖的符號 9-3 類別關係 9-4 物件圖 9-5 繪製類別圖與物件圖
Java程序设计 第9章 继承和多态.
Ch01 物件與類別複習 物件導向系統實務.
C#面向对象程序设计 $7 继承和多态性.
類別的繼承 Vehicle Car.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
Java程序设计 第2章 基本数据类型及操作.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
简单工厂模式.
辅导课程八.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第二章 Java基本语法 讲师:复凡.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Interfaces and Packages
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
辅导课程十五.
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Summary
Presentation transcript:

Chapter 4 Advanced Class Features 抽象、接口与多态

主要内容 静态(static)变量与方法,以及初始化 最终(final)类、变量与方法 抽象(abstract)类与方法 接口(interface) 多态

static keyword

static Keyword static 用于修饰变量、方法和内部类

类的静态变量 被类的所有对象实例共享

Class Attributes 具有public权限则可以被直接访问 public class OtherClass { public void incrementNumber() { Count.counter++; }

类的静态方法 public class Count { private int serialNumber; private static int counter = 0; public static int getTotalCount() { return counter; } public Count() { counter++; serialNumber = counter; OUTPUT: Number of counter is 0 Number of counter is 1 public class TestCounter { public static void main(String[] args) { System.out.println("Number of counter is " + Count.getTotalCount()); Count count1 = new Count(); }

静态模块的初始化 一个类可以包含一个静态代码块(不属于任何方法) 静态代码块只在类加载时执行一次 静态代码块一般用于初始化静态属性

Static Initializers public class Count { public static int counter; } public class TestStaticInit { public static void main(String args[]) { System.out.println("counter = " + Count.counter);

Singleton

单态(Singleton)设计模式

Singleton code:

Usage code: package shipping.reports; import shipping.domain.*; public class FuelNeedsReport { public void generateText(PrintStream output) { Company c = Company.getCompany(); // use Company object to retrieve the fleet vehicles }

多线程时的单体模式 class Singleton { private static Singleton instance; private Singleton() { ... } public static synchronized Singleton getInstance() { if (instance == null) instance = new Singleton(); return instance; } ... public void doSomething() { ... }

double-checked locking (con.) class Singleton { private static Singleton instance; private Singleton() { ... } public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } ... public void doSomething() { ... }

final keyword

final Keyword final 类不能被继承 final 方法不能被重写 final 变量是常数 空白最终变量(blank final variable):即只定义没赋值的变量 空白最终变量可以在构造方法中赋值 空白最终变量要在使用之前赋值

Final Variables Constants: public class Bank { } private static final double DEFAULT_INTEREST_RATE=3.2; // percent ... // more declarations }

Final Variables Blank Final Instance Attribute: public class Customer { private final long customerID; public Customer() { customerID = createID(); } public long getID() { return customerID; private long createID() { return ... // generate new ID ... // more declarations

Abstract class

抽象(Abstract)类: Scenario

Fleet initialization code: public class ShippingMain { public static void main(String[] args) { Company c = Company.getCompany(); // populate the company with a fleet of vehicles c.addVehicle( new Truck(10000.0) ); c.addVehicle( new Truck(15000.0) ); c.addVehicle( new RiverBarge(500000.0) ); c.addVehicle( new Truck(9500.0) ); c.addVehicle( new RiverBarge(750000.0) ); FuelNeedsReport report = new FuelNeedsReport(); report.generateText(System.out); }

FuelNeedsReport code: public class FuelNeedsReport { public void generateText(PrintStream output) { Company c = Company.getCompany(); Vehicle v; double fuel; double total_fuel = 0.0; for ( int i = 0; i < c.getFleetSize(); i++ ) { v = c.getVehicle(i); // Calculate the fuel needed for this trip fuel = v.calcTripDistance() / v.calcFuelEfficency(); output.println("Vehicle " + v.getName() + " needs " + fuel + " liters of fuel."); total_fuel += fuel; } output.println("Total fuel needs is " + total_fuel + " liters.");

Abstract Classes: Solution

Abstract Classes: Solution public abstract class Vehicle { public abstract double calcFuelEfficiency(); public abstract double calcTripDistance(); } public class Truck extends Vehicle { public Truck(double max_load) {...} public double calcFuelEfficiency() { public double calcTripDistrance() { public class RiverBarge extends Vehicle { public RiverBarge(double max_load) {...} /* calculate the fuel efficiency of a river barge */ /* calculate the distance of this trip along the river-ways */

模板方法Template Method 设计模式

Interfaces

接口Interfaces Java的接口(interface)只声明方法,不实现方法体 相互无关的类可以实施同一个接口 一个类可以实施多个无关的接口

在UML的接口图和类图相似,只是在名称上方使用<<interface>>指明接口

交通工具 车辆 船 飞机 喷气式飞机 非机动车 汽车 柴油机船 划艇 Interface 燃油

Interface Example public interface Flyer { public void takeOff(); public void land(); public void fly(); } public class Airplane implements Flyer { public void takeOff() { // accelerate until lift-off // raise landing gear public void land() { // lower landing gear // deccelerate and lower flaps until touch-down // apply breaks public void fly() { // keep those engines running

Interface Example

Interface Example public class Bird extends Animal implements Flyer { public void takeOff() { /* take-off implementation */ } public void land() { /* landing implementation */ } public void fly() { /* fly implementation */ } public void buildNest() { /* nest building behavior */ } public void layEggs() { /* egg laying behavior */ } public void eat() { /* override eating behavior */ } }

Interface Example

Interface Example public class Airport { public static void main(String[] args) { Airport metropolisAirport = new Airport(); Helicopter copter = new Helicopter(); SeaPlane sPlane = new SeaPlane(); Flyer S = Superman.getSuperman(); // Superman is a Singleton metropolisAirport.givePermissionToLand(copter); metropolisAirport.givePermissionToLand(sPlane); metropolisAirport.givePermissionToLand(S); } private void givePermissionToLand(Flyer f) { f.land();

声明接口 接口是一种特殊的类,由常量和抽象方法组成。 例: public interface AudioClip { public void play(); public void loop(); public void stop(); } 接口也有继承性,一个接口可以继承一个以上的父接口。 public interface AudioClipSub extends AudioClip1, AudioClip2{ }

Tasks: 设计一副有54张的扑克牌,并实现: 能通过洗牌获得随机排序的牌; 可以根据需要抽取任意张牌; 可以根据玩家人数发牌;