Java类、对象与接口
InterfaceTest Project —Animal/Dog/Cat
通过接口可以实现多重继承,一个类只能继承( extends)一个父类,但可以实现(implements )多个接口 “接口”和“实现”之间是一种“特殊的继承关 系” public class 类名 extends 父类 implements 接口1,接口2…
多态示例II
问题需求
开发一个DogHouse,里面有
各种类型的Dog,设计一个 方法可以依次听到所有 Dog 的叫声
ObjectTest Project— DogHouse/DogHouseTest
多态现象的产生,除了通过创建对象时父类对象 引用 指向具体子类对象之外,还可以通过方法参 数和方法返回值的形式:
接口的使用形式:
▪ 声明时采用接口,指向实现该接口的具体类对象 ▪ 方法参数为接口类型,可以传递任意实现该接口的具体 类对象 ▪ 方法返回值为接口类型,可以返回任意实现该接口的具 体类对象
示例
InterfaceTest Project —AnimalShouter/AnimalShouterTest
animal = new Cat();
animal.shout(); //调用Cat对象的shout方法
运行时,判断指向Dog类对象 public class Dog implements Animal{ 调用Dog类对象shout方法
public void shout(){
}
System.out.println(“汪汪汪….”); Animal animal = new Dog();} animal.shout();
Java类、对象与接口
本篇内容
回顾Java类和对象 回顾面向对象三个特征
Java接口概念
Java接口与多态的关系 面向接口编程
一 回顾Java类和对象
在Java世界里,万物皆对象
▪ Everything is Object
面向对象程序的思维方式
▪ 尽量按照人类的自然思维方式来看待和解决问题
3.3 接口与多态
多态:
▪ 同样一个方法调用,可以有不同的具体表现形态 ▪ 多态的实现:通过将父类对象引用变量指向子类对象, 来实现动态的方法调用
通过接口,是Java程序中实现多态的常见形式
▪ 接口是一种“特殊的父类”
▪ 接口中的方法都没有实现,强制要求在实现了接口的具 体子类中必须重写
四、面向接口编程
使用接口:
▪ 声明时采用接口类型,其指向为具体实现类对象 ▪ 运行时,根据其指向的具体对象类型,动态调用相应方 法 InterfaceTest Project —AnimalTest
Animal animal = new Dog(); animal.shout(); // 调用Dog对象的shout方法
dog = new BoltDog();
dog.bark();
此时,指向BoltDog类对象 调用BoltDog类对象重写的 bark方法
public class BoltDog extends Dog{
public void bark(){ System.out.println(“吱吱~”); } }
public class Cat implements Animal{ Cat实现
Animal接口 } } public void shout(){ System.out.println(“喵喵喵….”);
接口与实现
Animal shout()
Dog shout()
Cat
shout()
接口和实现示例
1.1 自然世界中的“类”和“对象 ”
自然世界中的“类”
类
基本解释:
拼音: 部首:
lèi 米
笔划: 9 五笔输入法:odu
Байду номын сангаас
类(類) 很多相似事物的综合:类型,种类,类别,类群,分类 笔画数:9 部首:米 笔顺编号:431234134
自然世界“类”的产生
2300多年前,古希腊亚里士 多德经过长期的科学实验观察 ,对世界上的500多种动物进 行了详细分类 “鸟类”、“鱼类”等这样的 “类型”概念和词汇第一次出 现在人类历史长河之中
自然世界
人类
张三、李四 …
个体
Java世界
Person class
Person
对象
二、面向对象的三个特征
面向对象程序设计的三大特征:
▪ 封装
▪ 继承
▪ 多态
2.1特征I——封装(Encapsulation)
“破坏封装”示例 ObjectTest Project——BagDog类/BagDogTest测试类
▪ 多态示例I ObjectTest —DogTest3
运行时判断指向HuskyDog类 public class HuskyDog extends Dog{ 对象,调用HuskyDog类对象 重写的bark方法 public void bark(){
System.out.println(“嗷呜~”); } Dog dog = new HuskyDog(); } dog.bark();
▪ 存取权限设置不当,直接暴露信息,破坏了类的封装原 则
“遵循封装”示例 ObjectTest ——Dog类/DogTest测试类
▪ 创建存取方法,并强制程序必须通过方法进行数据访问
存取方法的命名习惯:setter和getter方法
封装实现了“数据隐藏”
封装基本原则
1
将成员变量标记为 私有private 提供setter和getter存 取方法,标记为 公开public
}
public class Dog implements Animal{ Dog实现 Animal接口 }
public void shout(){
System.out.println(“汪汪汪….”);
public Interface Animal{ }
public void shout(); }
“类”是抽象的概念,“对象”是具体的个
1.2 程序世界中的类和对象
Java程序世界用一种复合数据类型class来表示“ 类”
public class Person{ private int age; public void eat() 方法体 }; }
成员方法,代表可以执行的动作
private String name;
“面向接口编程”是一项重要的面向对象设计原 则,遵循“面向接口编程”原则,可以增强程序 (系统)的灵活性和扩展性 程序(系统)采用接口,可以通过更换接口的实 现类,以达到“灵活更换程序(系统)实现”的 目的
理解面向接口编程—回顾Servlet API
Servlet API:Sun公司定义了一套专门用于开发 Servlet程序的Java类和接口,这些类和接口提供 Servlet程序开发所涉及的各种功能,统称为Servlet API.
▪ 支持Servlet的Web服务器软件都自带Servlet API具体实现 的JAR包
Tomcat自带Servlet API的JAR包:安装目录\lib目录 \servlet-api.jar
不同服务器软件提供各自不同的Servlet API实现
查看Servlet API文档中响应客户请求方法
2
2.2特征II——继承(inheritance)
继承的定义:继承是一个类可以获得另一个类的 特性的机制
▪ 存在继承关系时,现有类称为“父类”(基类、超类) ,从其继承而来的新类称为“子类”(派生类)
“子类继承(extends)父类”
▪ 子类自动继承了父类的成员变量和方法
▪ 子类可以增加自己的成员变量和方法 ▪ 子类可以覆盖(重写)继承的方法
public Interface Animal{ void shout(); }
Animal animal = new Animal();
由具体类实现(implements)接口,并实现接口中 定义的方法
public class 具体类 implements 接口名{ 实现接口中定义的具体方法;
3.2 接口的声明与使用
Java接口采用Interface来定义
▪ 以下定义一个名字叫“Animal”的接口,接口中只声明 了一个shout()方法原型,无具体实现 public Interface Animal{ public void shout();
}
程序中不能像使用具体类那样直接使用(实例化 )接口
“继承”的这种特点导致了面向对象最具威力的 特征——多态——的产生
2.3特征III——多态(Polymorphism)
多态:
▪ 同样一个方法调用,可以有不同的具体表现形态
多态的实现:
▪ 通过将父类对象引用变量指向子类对象,来实现动态的 方法调用
一般的对象创建形式(如创建PekingDog类)
▪ 当方法参数为父类型时,可以传递子类型对象 ▪ 当方法返回值为父类型时,可以返回任意子类型对象
示例
ObjectTest —DogBarker/DogBarkerTest
三、Java接口
3.1 Java接口的定义
一个Java接口是一组方法的声明,但没有方法的 具体实现,其实现是由实现了该接口的具体类来 完成
PekingDog dog = new PekingDog();