JAVA(面向对象【接口、多态】)v20170306

JAVA(面向对象【接口、多态】)v20170306
JAVA(面向对象【接口、多态】)v20170306

第3天面向对象

今日内容介绍

◆接口

◆多态

◆笔记本案例

今日学习目标

◆写出定义接口的格式

◆写出实现接口的格式

◆说出接口中成员的特点

◆接口和抽象类的区别

◆能够说出使用多态的前提条件

◆理解多态的向上转型

◆理解多态的向下转型

◆能够完成笔记本电脑案例(方法参数为接口)

第1章接口

1.1接口概念

接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。

接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。

请记住:一切事物均有功能,即一切事物均有接口。

1.2接口的定义

与定义类的class不同,接口定义时需要使用interface关键字。

定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件。这点可以让我们将接口看做是一种只包含了功能声明的特殊类。

定义格式:

public interface 接口名 {

抽象方法1;

抽象方法2;

抽象方法3;

}

使用interface代替了原来的class,其他步骤与定义类相同:

●接口中的方法均为公共访问的抽象方法

●接口中无法定义普通的成员变量

1.3类实现接口

类与接口的关系为实现关系,即类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements。

其他类(实现类)实现接口后,就相当于声明:”我应该具备这个接口中的功能”。实现类仍然需要重写方法以实现具体的功能。

格式:

class 类 implements 接口 {

重写接口中方法

}

在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法,完成具体的逻辑。

●接口中定义功能,当需要具有该功能时,可以让类实现该接口,只声明了应该具备

该方法,是功能的声明。

●在具体实现类中重写方法,实现功能,是方法的具体实现。

于是,通过以上两个动作将功能的声明与实现便分开了。(此时请重新思考:类是现实事物的描述,接口是功能的集合。)

1.4接口中成员的特点

1、接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量,其值不能改变。后面我们会讲解static与final关键字

2、接口中可以定义方法,方法也有固定的修饰符,public abstract

3、接口不可以创建对象。

4、子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。

interface Demo { ///定义一个名称为Demo的接口。

public static final int NUM = 3;// NUM的值不能改变

public abstract void show1();

public abstract void show2();

}

//定义子类去覆盖接口中的方法。类与接口之间的关系是实现。通过关键字 implements

class DemoImpl implements Demo { //子类实现Demo接口。

//重写接口中的方法。

public void show1(){}

public void show2(){}

}

1.5接口特点

●接口可以继承接口

如同类继承类后便拥有了父类的成员,可以使用父类的非私有成员。A接口继承B 接口后,A接口便拥有了A、B两个接口中所有的抽象方法。

●Java支持一个类同时实现多个接口,或一个接口同时继承多个接口。

●类可以在继承一个类的同时,实现多个接口。

●接口与父类的功能可以重复,均代表要具备某种功能,并不冲突。

1.6接口和抽象的区别

明白了接口思想和接口的用法后,接口和抽象类的区别是什么呢?接口在生活体现也基本掌握,那在程序中接口是如何体现的呢?

通过实例进行分析和代码演示抽象类和接口的用法。

1、举例:

犬:

行为:

吼叫;

吃饭;

缉毒犬:

行为:

吼叫;

吃饭;

缉毒;

2、思考:

由于犬分为很多种类,他们吼叫和吃饭的方式不一样,在描述的时候不能具体化,也就是吼叫和吃饭的行为不能明确。当描述行为时,行为的具体动作不能明确,这时,可以将这个行为写为抽象行为,那么这个类也就是抽象类。

可是当缉毒犬有其他额外功能时,而这个功能并不在这个事物的体系中。这时可以让缉

毒犬具备犬科自身特点的同时也有其他额外功能,可以将这个额外功能定义接口中。

如下代码演示:

interface 缉毒{

public abstract void 缉毒();

}

//定义犬科的这个提醒的共性功能

abstract class 犬科{

public abstract void 吃饭();

public abstract void 吼叫();

}

// 缉毒犬属于犬科一种,让其继承犬科,获取的犬科的特性,

//由于缉毒犬具有缉毒功能,那么它只要实现缉毒接口即可,这样即保证缉毒犬具备犬科的特性,也拥有了缉毒的功能

class 缉毒犬 extends 犬科 implements 缉毒{

public void 缉毒() {

}

void 吃饭() {

}

void 吼叫() {

}

}

class 缉毒猪 implements 缉毒{

public void 缉毒() {

}

}

3、通过上面的例子总结接口和抽象类的区别:

相同点:

●都位于继承的顶端,用于被其他类实现或继承;

●都不能直接实例化对象;

●都包含抽象方法,其子类都必须覆写这些抽象方法;

区别:

●抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只

能包含抽象方法;

●一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了

Java的单继承)

●抽象类为继承体系中的共性内容,接口为继承体系中的扩展功能

二者的选用:

●优先选用接口,尽量少用抽象类;

●需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;

第2章多态

2.1多态概述

多态是继封装、继承之后,面向对象的第三大特性。

现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。

Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。

Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。

如Student类可以为Person类的子类。那么一个Student对象既可以赋值给一个Student 类型的引用,也可以赋值给一个Person类型的引用。

最终多态体现为父类引用变量可以指向子类对象。

多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。

在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

2.2多态代码体现

Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。

如Student类可以为Person类的子类。那么一个Student对象既可以赋值给一个Student 类型的引用,也可以赋值给一个Person类型的引用。

最终多态体现为父类引用变量可以指向子类对象。

多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。

在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

具体格式如下:

父类引用指向子类对象就是多态的定义格式。同一个父类的方法会被不同的子类重写为各自的具体实现。在调用方法时,调用的为各个子类重写后的方法。

父类类型变量名= new 子类类型();

变量名.方法名();

此时,虽然该变量指向的是子类对象,但表现为一个父类的形态,可以调用一切父类的方法,子类特有的方法将不能调用。

2.3多态调用注意事项

●成员变量编译看父类中是否存在,不存在编译失败

●成员变量运行父类中的变量

●成员方法编译看父类中是否存在,不存在编译失败

●成员方法运行子类重写的方法

2.4多态的好处和弊端

当变量名指向不同的子类对象时,由于每个子类重写父类方法的内容不同,所以会调用不同的方法。

如:

在Boss类中,有叫员工去工作的方法,当该方法的参数定义为接口时,可以传入任意的子类对象。相比定义多个子类参数,定义多个方法,这样大大提高了代码复用性与扩展性。

class Boss{

public void goToWork(Empolyee e){

e.work();

}

}

所以多态的存在意义(优点)为:

配合继承与方法重写提高了代码的复用性与扩展性,如果没有方法重写,则多态同样没有意义。

多态的弊端: 不能调用子类的特有方法

2.5向上向下类型转换

多态本身是子类类型向父类类型向上转型的过程。

多态的转型分为向上转型与向下转型两种:

●向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向

上转型的过程。

使用格式:

父类类型变量名 = new 子类类型();

如:Animal p = new Cat();

●向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引

用转为子类引用,这个过程是向下转型。如果是直接创建父类对象,是无法向下转

型的!

使用格式:

子类类型变量名 = (子类类型) 父类类型的变量;

如:Cat c = (Cat) a; //变量p 实际上指向Cat对象

●instanceof关键字

使用格式:

boolean b = 引用变量 instanceof 类;

if(a instanceof Dog){

Dog d = (Dog)a;

}

第3章笔记本电脑案例

3.1案例介绍

定义USB接口(具备开启功能、关闭功能),笔记本要使用USB设备,即笔记本在生产时需要预留可以插入USB设备的USB接口,即就是笔记本具备使用USB设备的功能,但具体是什么USB设备,笔记本并不关心,只要符合USB规格的设备都可以。鼠标和键盘要想能在电脑上使用,那么鼠标和键盘也必须遵守USB规范,不然鼠标和键盘的生产出来无法使用

进行描述笔记本类,实现笔记本使用USB鼠标、USB键盘

●USB接口,包含开启功能、关闭功能

●笔记本类,包含运行功能、关机功能、使用USB设备功能

●鼠标类,要符合USB接口

●键盘类,要符合USB接口

3.2案例需求分析

阶段一:

使用笔记本,笔记本有运行功能,需要笔记本对象来运行这个功能阶段二:

想使用一个鼠标,又有一个功能使用鼠标,并多了一个鼠标对象。

阶段三:

还想使用一个键盘,又要多一个功能和一个对象

问题:每多一个功能就需要在笔记本对象中定义一个方法,不爽,程序扩展性极差。降低鼠标、键盘等外围设备和笔记本电脑的耦合性。

3.3实现代码步骤

●定义鼠标、键盘,笔记本三者之间应该遵守的规则

interface USB {

void open();// 开启功能

void close();// 关闭功能

}

●鼠标实现USB规则

class Mouse implements USB {

publicvoid open() {

System.out.println("鼠标开启");

}

publicvoid close() {

System.out.println("鼠标关闭");

}

}

●键盘实现USB规则

class KeyBoard implements USB {

publicvoid open() {

System.out.println("键盘开启");

}

publicvoid close() {

System.out.println("键盘关闭");

}

}

●定义笔记本

class NoteBook {

// 笔记本开启运行功能

publicvoid run() {

System.out.println("笔记本运行");

}

// 笔记本使用usb设备,这时当笔记本对象调用这个功能时,必须给其传递一个符合USB规则的USB设备

publicvoid useUSB(USB usb) {

// 判断是否有USB设备

if (usb != null) {

usb.open();

usb.close();

}

}

publicvoid shutDown() {

System.out.println("笔记本关闭");

}

}

publicclass Test {

publicstaticvoid main(String[] args) { // 创建笔记本实体对象

NoteBook nb = new NoteBook();

// 笔记本开启

nb.run();

// 创建鼠标实体对象

Mouse m = new Mouse();

// 笔记本使用鼠标

https://www.360docs.net/doc/1b10029689.html,eUSB(m);

// 创建键盘实体对象

KeyBoard kb = new KeyBoard();

// 笔记本使用键盘

https://www.360docs.net/doc/1b10029689.html,eUSB(kb);

// 笔记本关闭

nb.shutDown();

}

}

java 实验5 接口多态 实验报告

实验五接口、多态与内部类 实验目标: 1、理解接口、塑型、多态的概念并能熟练应用; 2、熟练掌握接口的定义和使用; 3、深刻理解构造方法的调用顺序,理解编写时需要注意的问题; 4、了解并学会使用内部类 实验任务: 1、继承时的多态:目测给出下面代码的执行输出结果,并简单解释每一行输出的原因。 答:首先,该程序的主函数是Vehicle v=new Vehicle();即先声明并实例化一个汽车对象,而v.test();则是调用汽车的测试方法;而test方法里,Vehicle vc=new Car();是将上面的汽车指向了一个具体的小汽车对象;Bus vb=new Bus();将公共汽车指向了一个具体的公共汽车对象;drive();调用汽车的驾驶方法;vc.drive();调用小汽车的驾驶方法;vb.drive();调用公共汽车的驾驶方法;而vc.brake();vb.brake();则是直接调用汽车的刹车方法。因而运行结

果如下: A new bus. Vehicle is driven Car is driven Bus is driven Vehicle is braked Vehicle is braked 2.针对下面的简单的类图,从面向对象的角度,将Instrument定义成接口,应怎样实现。编写能完成如图功能的程序,并再编写一个简单的应用程序进行多态性测试。(参考例子5-9;实验4该题是要求用抽象类来实现,在此要求用接口实现,还要进行多态性测试) 说明:Instrument表示乐器、Wind表示管乐器、Percussion敲击乐器、Stringed表示弦乐器、Woodwind表示木管乐器、Brass表示铜管乐器。 要求:(1)Instrument为接口,Wind为抽象类,其他为普通类。这里测试的目的是:我们知道当一个普通类实现一个接口时,必须实现该接口的全部方法,但当这个类是抽象类时,我们还需要实现该接口全部方法吗?如果不需要实现?那么是否直接不理这个方法就一,还是要将这个方法在自己类内部再标记一次为抽象方法。(听起来有点晕,测试很简单的,有时百读不如一试) (2)请编写测试代码,对实现Instrument接口的各个类进行多态测试,具体可参考课本例子。所谓多态测试就是向上自动塑型,以及向下动态绑定,而动态绑定的基本规则是实例方法“由下往上”寻找绑定,类方法和类属性成员“由上往下”寻找绑定。(对其概念不清晰的请留意课本知识与课堂讲解) 该题代码如下: package zi; interface Instrument { void play(); String what(); void adjust(); }

JAVA(面向对象【接口、多态】)v20170306

第3天面向对象 今日内容介绍 ◆接口 ◆多态 ◆笔记本案例 今日学习目标 ◆写出定义接口的格式 ◆写出实现接口的格式 ◆说出接口中成员的特点 ◆接口和抽象类的区别 ◆能够说出使用多态的前提条件 ◆理解多态的向上转型 ◆理解多态的向下转型 ◆能够完成笔记本电脑案例(方法参数为接口) 第1章接口 1.1接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。 请记住:一切事物均有功能,即一切事物均有接口。

1.2接口的定义 与定义类的class不同,接口定义时需要使用interface关键字。 定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件。这点可以让我们将接口看做是一种只包含了功能声明的特殊类。 定义格式: public interface 接口名 { 抽象方法1; 抽象方法2; 抽象方法3; } 使用interface代替了原来的class,其他步骤与定义类相同: ●接口中的方法均为公共访问的抽象方法 ●接口中无法定义普通的成员变量 1.3类实现接口 类与接口的关系为实现关系,即类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements。 其他类(实现类)实现接口后,就相当于声明:”我应该具备这个接口中的功能”。实现类仍然需要重写方法以实现具体的功能。 格式: class 类 implements 接口 { 重写接口中方法 } 在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法,完成具体的逻辑。 ●接口中定义功能,当需要具有该功能时,可以让类实现该接口,只声明了应该具备 该方法,是功能的声明。 ●在具体实现类中重写方法,实现功能,是方法的具体实现。 于是,通过以上两个动作将功能的声明与实现便分开了。(此时请重新思考:类是现实事物的描述,接口是功能的集合。) 1.4接口中成员的特点 1、接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量,其值不能改变。后面我们会讲解static与final关键字 2、接口中可以定义方法,方法也有固定的修饰符,public abstract 3、接口不可以创建对象。 4、子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。 interface Demo { ///定义一个名称为Demo的接口。

Java实验报告 继承、多态、接口和异常处理

实验5 继承、多态、接口和异常处理 一、实验目的 1、掌握Java的类和对象的声明和使用方法; 2、掌握Java的类的继承和实现方法; 3、掌握多态性在类的继承中的运用; 4、掌握接口的定义与使用; 5、掌握基本异常的处理机制; 6、熟悉try语句与catch语句的搭配使用; 7、了解有异常处理与没有异常处理的差别; 8、多重catch语句的使用; 9、使用Throws声明异常和Throw抛出异常。 二、实验环境 1、PC微机; 2、DOS操作系统或 Windows 操作系统; 3、Java sdk程序开发环境、eclipse集成环境。 三、实验内容 1. 设计三个类,分别是学生类Student,本科生类UnderGraduate,研究生类 Postjgraduate,其中Student类是一个抽象类,它包含学生的基本信息如姓名、所学课程、课程成绩等,而Undergraduate类和Postgraduate类都是Student类的子类,这两个类计算课程成绩等级的方法有所不同,如下表所示。假设某班级里既有研究生又有本科生,编写程序统计出全班学生 2. 和 Mobilephone具体实现,并设计一个应用程序类来使用这些类。 3.要求设计一个GUI图形窗口程序,该程序让用户输入一个星期中的任意一天的数字1-7,然后输出该数字所对应的是星期几。 四、实验步骤 实验内容一

1.建立package experiment5_1,其最终目录结构如下: 2.建立Student类: package experiment5_1; public abstract class Student { final static int CourseNo = 3; String name; String type; int[] courses; String courseGrade; public Student(String name) { https://www.360docs.net/doc/1b10029689.html, = name; courses = new int[CourseNo]; courseGrade = "" ; } public abstract void calculateGrade(); public String getName( ) { return name; } public String getType( ) { return type ; } public String getCourseGrade( ) { return courseGrade; } public int getCourseScore(int courseNumber) { return courses[courseNumber]; } public void setName(String name) { https://www.360docs.net/doc/1b10029689.html, = name; } public void setType(String type) { this.type = type; } public void setCourseScore(int courseNumber, int courseScore) { //按课程索引号设置课程成绩 this.courses[courseNumber] = courseScore ; } }

Java继承与多态实验报告

西安邮电大学 (计算机学院) 课内实验报告 实验名称:继承与多态 专业名称:计算机科学与技术 班级:计科1405班 学生姓名:高宏伟 学号:04141152 指导教师:刘霞林 实验日期:2016.10.13

一、实验目的 通过编程和上机实验理解Java 语言的继承和多态特性,掌握变量的隐藏、方法的覆盖、重载,掌握抽象类和接口的使用。 二、实验要求 1.编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序。 2.编写体现类的多态性(成员方法重载)的程序。 3.编写体现类的多态性(构造方法重载)的程序。 4.编写使用接口的程序。 三、实验内容 (一)类的继承 1.创建公共类Student. (1)编写程序文件Student.java,源代码如下: public class Student { protected String name; //具有保护修饰符的成员变量 protected int number; void setData(String m,int h) //设置数据的方法 { name =m; number= h; } public void print() //输出数据的方法 { System.out.println(name+", "+number); } } (2)编译Student.java,产生类文件Student.class。 2.创建继承的类Undergraduate

(1)程序功能:通过Student 类产生子类undergraduate,其不仅具有父类的成员变量name()、number(学号),还定义了新成员变量academy(学院)、department (系)。在程序中调用父类的print 方法。 (2)编写Undergraduate 程序: class Undergraduate extends Student { 【代码1】//定义成员变量academy 【代码2】//定义成员变量department public static void main(String args[]) { 【代码3】//创建一个学生对象s 【代码4】//用父类的setData方法初始化对象s 【代码5】//对象s调用print方法 【代码6】//创建一个大学生对象u 【代码7】//调用父类的成员方法setData初始化对象u 【代码8】//设置对象u的成员变量academy 【代码9】//设置对象u的成员变量department System.out.print(https://www.360docs.net/doc/1b10029689.html,+", "+u.number+", "+u.academy+", "+u.department); } } (3)编译并运行程序 注意:公共类Student 与undergraduate 类要在同一文件夹(路径)。 (二)方法的重载 (1)程序功能:对不同的数进行排序输出。在IntSort 类中定义3 个同名的方法sort。 (2)编写Sort.java 文件,源代码如下。 import java.awt.Graphics; import java.applet.Applet; class IntSort { public String sort(int a, int b) { if (a>b) return a+""+b; else return b+""+a; } public String sort(int a, int b, int c) { int swap; if (a

Java接口多态实验(修正版带实验答案)

实验9:接口、多态性 一、实验目的与要求 1、多态性的概念、技术基础 2、构造方法的调用顺序 3、总结接口的应用 二、内容概要 1、多态性概念 是指不同类型的对象可以响应相同的消息。从相同的基类派生出来的多个类型可被当作同一种类型对待,可对这些不同的类型进行同样的处理,由于多态性,这些不同派生类对象响应同一方法时的行为是有所差别的。 例如 ●Cat行为是吃鱼,Dog行为是吃骨头 ●所有的Object类的对象都响应toString()方法 2、多态性的技术基础 ●向上塑型技术:一个父类的引用变量可以指向不同的子类对象 ●动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法,从 而实现多态性 3、多态性的好处 应用程序不必为每一个派生类(子类)编写功能调用,只要对基类(特别是抽象基类)或接口处理即可,“以不变应万变”,大大提高程序的可复用性。 例如:下面代码Waiter类中的callPersonEat方法参数是Person 类型,所以利用向上塑性技术可以给其传参数China和USA类型。而该方法体p.eat(); ,利用动态邦定技术运行时候根据p引用的具体对象调用创建对象时所属类的eat方法 interface Person{ public void eat(); } class China implements Person{ public void eat(){ System.out.println("chinese use chopsticks"); } } class USA implements Person{ public void eat(){ System.out.println("usa use forks"); } } class Waiter{ static void callPersonEat(Person p){ p.eat(); //实例方法调用,动态绑定 } public static void main(String a[]){

Java程序设计-多态与接口

Java程序设计 实验四:继承、多态与接口 1.提交期限和方法 期限:第12周周五(2015-11-27)23:59 pm 方法:由学习委员收集所有学生的实验报告,以电子档的形式提交给任课教师(发邮箱:9867941@https://www.360docs.net/doc/1b10029689.html,)。 2.实验目的及要求 掌握Java的基本数据类型、运算符、表达式和语句。 运行环境:JDK1.7 开发环境:Eclipse 3.实验内容及题目 3.1子类的继承与方法的重写 【题1 中国人与美国人】在Eclipse 中创建名为Lab4的新项目,编写程序模拟中国人、美国人、北京人。除主类外,程序中有4个类:People、ChinaPeople、AmericanPeople 和BeijingPeople类。要求如下: (1)People类有权限是protected的double型成员变量:height和weight,以及public void speakHello( )、public void averageHeight( )和public void averageWeight( )方法。 (2)ChinaPeople类是People类的子类,新增了public void chinaGongfu( )方法。要求ChinaPeople重写父类的public void speakHello ()、public void averageHeight( )和public void averageWeight( )方法。 (3)AmericanPeople类是People的子类,新增public void americanBoxing( )方法。要求AmericanPeople重写父类的public void speakHello( )、public void averageHeight( )和public void averageWeight( )方法。 (4)BeijingPeople类是ChinaPeople的子类,新增public void beijingOpera( )方法。要求BeijingPeople重写父类的public void speakHello( )、public void averageHeight( )和public void averageWeight( )方法。 运行效果如下图。按下列代码模板要求,将【代码】部分替换为Java程序代码。

实验报告 继承、多态与接口

实验三继承、多态与接口 一、实验目的 1.掌握Ja v a的继承机制; 2.掌握对象引用的多态方法; 3.掌握接口的特点、结构和调用; 4.掌握接口和继承的混合使用。 二、实验要求 1.编写体现类的继承性(成员变量、成员方法、成员变量隐藏) 的程序。 2.编写体现类的多态性(成员方法重载、构造方法重载)的程 序。 3.编程使用系统接口的技术和创建自定义接口的方法。 三、实验内容 (一)类的继承性练习 1.理解继承的含义 新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。新类还可添加新的变量和方法。这种现象就称为类的继承。 当建立一个新类时,不必写出全部成员变量和成员方法。只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。被继承的类称为父类或超类 (su pe rc la ss),这个新类称为子类。 J a va 提供了一个庞大的类库让开发人员继承和使用。设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。所以,通常要对子类进行扩展,即添加新的属性和方法。这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。继承的意义就在于此。 2.创建公共类S Y3_1_P 编写程序文件S Y3_1_P.ja va,源代码如下:pu bl ic c la ss SY3_1_P{ pr ote c te d St ri ng x m; //具有保护修饰符的成员变量 pr ote c te d in t xh; vo id s et da ta(S tr in g m,in t h) { //设置数据的方法 xm =m; xh = h; } pu bl i c vo id p ri nt(){//输出数据的方法 Sy st em.o ut.pr i nt ln(x m+", "+xh); } }

java多态性

Java的多态性 面向对象编程有三个特征,即封装、继承和多态。 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据。 继承是为了重用父类代码,同时为实现多态性作准备。那么什么是多态呢? 方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了更大的麻烦,为了规避风险,Java只允许单继承,派生类与基类间有IS-A的关系(即“猫”is a “动物”)。这样做虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制,所以,Java引入了多态性的概念以弥补这点的不足,此外,抽象类和接口也是解决单继承规定限制的重要手段。同时,多态也是面向对象编程的精髓所在。 要理解多态性,首先要知道什么是“向上转型”。 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类。我可以通过 Cat c = new Cat(); 实例化一个Cat的对象,这个不难理解。但当我这样定义时: Animal a = new Cat(); 这代表什么意思呢? 很简单,它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象。由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的。那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特, 定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。 所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的;

java重载与多态

多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性。在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度;今天我们再次深入Java核心,一起学习Java中多态性的实现。 “polymorphism(多态)”一词来自希腊语,意为“多种形式”。多数Java程序员把多态看作对象的一种能力,使其能调用正确的方法版本。尽管如此,这种面向实现的观点导致了多态的神奇功能,胜于仅仅把多态看成纯粹的概念。 Java中的多态总是子类型的多态。几乎是机械式产生了一些多态的行为,使我们不去考虑其中涉及的类型问题。本文研究了一种面向类型的对象观点,分析了如何将对象能够表现的行为和对象即将表现的行为分离开来。抛开Java中的多态都是来自继承的概念,我们仍然可以感到,Java中的接口是一组没有公共代码的对象共享实现。 多态的分类 多态在面向对象语言中是个很普遍的概念.虽然我们经常把多态混为一谈,但实际上有四种不同类型的多态。在开始正式的子类型多态的细节讨论前,然我们先来看看普通面向对象中的多态。 Luca Cardelli和Peter Wegner("On Understanding Types, Data Abstraction, and Polymorphism"一文的作者,文章参考资源链接)把多态分为两大类----特定的和通用的----四小类:强制的,重载的,参数的和包含的。他们的结构如下: 在这样一个体系中,多态表现出多种形式的能力。通用多态引用有相同结构类型的大量对象,他们有着共同的特征。特定的多态涉及的是小部分没有相同特征的对象。四种多态可做以下描述:

Java实验报告4 接口和多态

实验报告 【实验名称】第四章接口和多态 【实验目的】 1.学习Java中抽象类的概念 2.学习接口的概念 3.学习面向抽象的编程以及面向接口的编程 【实验原理】 1.Java程序设计基本原理 2.面向对象程序设计基本原理 【实验内容】 一、结合本次课程,简答: 1、什么是上转型对象?调用子类方法原则? 将子类赋给父类时,称父类为子类的上转型对象。 方法原则:只能调用子类继承和重写的方法,不能调用子类中新的方法。

2、父类创建的对象和其子类的上转型对象异同? 相同点:都可以对父类里的方法进行调用。 不同点:上转型对象调用的父类方法只能是子类重写之后的,而父类创建的对象调用的是自身定义的。 3、为什么引入抽象类和抽象方法? 抽象类只关心操作,不关心操作具体实现细节,可以使程序员把精力集中在程序的设计上,而不必拘泥于细节的实现。也就是说设计者只需设计好方法,而具体方法实现由子类的设计者实现。减轻了程序员的负担。 4、接口和抽象类的异同? 相同点:二者都是需要背继承和实现后才有实际意义,并且二者都有抽象类型。 不同点:抽象类属于类,接口是一种新的数据类型;抽象类的属性可以是常量和变量,而接口中只能是常量;抽象类中可以有抽象方法和普通方法,而接口中只能是抽象方法;抽象类将其抽象方法的实现交给其子类,而接口将其抽象方法的实现交给实现该接口的类。 5、接口和类的异同? 相同点:接口和类都是数据类型;属性中都有常量,方法中都有抽象类方法。 不同点:类的属性是变量和常量,方法需要实现,而接口的属性只能是常量,方法只需声明;类中可以有抽象方法和普通方法,而接口中只能是抽象方法; 类的属性可以是常量和变量,而接口中只能是常量;类中可以有抽象方法和普通方法,而接口中只能是抽象方法。 二、程序设计

java程序设计类的多态、抽象类、接口和包的使用

实验六:类的多态、抽象类、接口和包的使用 一、实验目的 熟练地掌握Java语言的掌握类的多态、抽象类、接口和包的使用的编程。通过实验掌握编写程序的思想方法,体会编程的技巧,加深Java语言的应用能力。 二、实验环境 硬件环境:微型计算机。 软件环境:Windows 2000或以上版本,JKD, Jcreator 三、实验内容与要求 用Java语言编程实现以下问题: 1、利用多态编写程序,定义一个JuLi类,只包含两个方法distance(double x,double y)求出点(x,y)到原点之间的距离和distance(double x,double y,double z)求出点(x,y,z)到原点之间的距离。再定义一个public类,用类名去创建两个对象,输出其两值。提示:开平方根用Math.sqrt(9.0),注意所有的数据一定要用double类型 程序: class JuLi { double distance(double x,double y) { return Math.sqrt(x*x+y*y); } double distance(double x,double y,double z) { return Math.sqrt(x*x+y*y+z*z); } } public class Distance_DuoTai { public static void main(String args[]) { JuLi s=new JuLi(); System.out.println("点(x,y)到原点之间的距离"+s.distance(3.0,4.0)); System.out.println("点(x,y,z)到原点之间的距离"+s.distance(3.0,4.0,12.0)); } } 运行结果:

java实验8 接口与类的多态 - 答案

实验八接口与类的多态 一、实验时间:姓名:学号: 二、实验目的 1、理解接口的作用; 2、掌握接口的定义方式; 3、掌握接口的继承; 4、掌握通过类来实现接口; 5、理解并掌握类的多态; 三、知识点 1、接口的定义; 2、接口的实现; 3、类的多态 四、实验内容与步骤 1、编写程序为公交车的老人卡、学生卡和普通市民卡类提供收费功能,将收费功能提取, 以接口的形式定义,然后被这三种卡类实现。再定义一个刷卡机类,能够对这三类卡进行刷卡操作。最后编写一个测试类,用于测试刷卡机对公交车三类卡的刷卡操作。 //接口 public interface Shuaka { void shoufei(); } //成人卡 public class AdultCard implements Shuaka { @Override public void shoufei() { // TODO Auto-generated method stub System.out.println("收费2元"); } } //老人卡 public class OlderCard implements Shuaka { @Override public void shoufei() { // TODO Auto-generated method stub System.out.println("收费1元");

} } //学生卡 public class StudentCard implements Shuaka { @Override public void shoufei() { // TODO Auto-generated method stub System.out.println("收费0.6元"); } } //刷卡机 public class Shuakamch { void useCard(Shuaka c){ c.shoufei(); } } //测试类 public class TestShuka { public static void main(String[] args) { // TODO Auto-generated method stub Shuaka ac=new AdultCard(); Shuaka oc=new OlderCard(); Shuaka sc=new StudentCard(); Shuakamch skj=new Shuakamch(); https://www.360docs.net/doc/1b10029689.html,eCard(ac); https://www.360docs.net/doc/1b10029689.html,eCard(oc); https://www.360docs.net/doc/1b10029689.html,eCard(sc); } } 2、按照要求实现以下类: 1)编写圆、长方形和三角形的实体类。 2)编写定义计算面积和周长的接口。 3)编写圆、长方形和三角形的业务类来实现接口。 4)编写业务类,计算以圆、长方形和三角形为底面,任意长度为高的立体的体积和表面积。 5)编写测试类,分别计算以半径为2的圆、长宽分别为4,3的长方形,三边分别为5,4,3的三角形为底面,高为5的立体的体积和表面积。 //实体类省略,自己编写 //接口 public interface ShapeCom { double getArea(); double getPerimeter(); } //圆的业务类

5、接口与多态

§5 接口与多态 一、填空题 1、实现多态的两个关键技术是,类型向上转换和动态绑定。 2、在Java中,一个类内可以定义数据成员和方法,除此之外,还可义定类,采用这种方式定义的类被称为内部类 3、接口是Java语言中实现多态性的一种重要方法,Java语言中的接口允许实现多重继承。 4、实现多态的两个关键技术是,类型向上转换和动态绑定。 二、判断题 1、接口(Interface)使抽象的概念更深入了一层。可将接口想象成 一个“纯”抽象的类。 参考答案:正确 2、实现接口的类必须实现接口中的所有抽象方法,在实现一个接口 时,来自接口的方法可声明成public或protected. 参考答案:不正确 ///必须声明为public 3、接口中的属性者隐含为static 和final,所有方法都为public. 参考答案:正确 //抽象方法+类变量 4、强制类型转换可应用于任意变量(包括引用变量)。 参考答案:不正确 5、Java的interface允许多重继承,但一个类只允许实现一个接口.

参考答案:不正确 6、引用变量的类型转换包括:Widening reference conversions 和 Narrowing reference conversions ,但一个对象只能暂时被当成更一般的对象来看待(Widening reference conversions),而不能是相反的转换。 参考答案:正确 7、由于Java只支持单重继承,Java程序中的类的层次结构是树状 结构。 参考答案:正确 8、 Java不支持多重继承,理由是为了使Java程序的设计实现变的 简单。接口允许多重继承,但这并不增加Java程序设计及实现的复杂性. 参考答案:正确 9、 Java语言支持时期绑定和后期绑定. 参考答案:正确 10、调用某一个对象的方法,也称为给这个对象发一个消息. 参考答案:正确 11、多态性是指不同类型的对象可响应相同的消息,因此这些消息 (方法)必须是public的。 参考答案:正确 12、后期绑定也称为动态绑定,多态性的实现离不开动态绑定. 参考答案:正确 三、单项选择题 1、接口中可以包含数据成员,这些数据成员是有特定限制的,以下说法正确的是: A、数据成员只能是static的

java多态的好处和弊端

多态的好处: 1.提高了代码的维护性(继承保证) 2.提高了代码的扩展性(由多态保证) 多态的弊端: 1.不能使用子类的特有功能 2.创建子类对象调用方法(可行但是很多时候是不合理的,而且太占内存) 3. 对象间的转型问题 1.向上转型(父类引用指向子类对象) Fu f=new zi();现在是zi类型的,外面看到的是fu类型的所以是zi向fu的向上转型2.向下转型(父类引用转为子类对象) Zi z=(zi)f;看到的是f,外面看到的是zi所以是f向zi的向下转型 多态的成员访问特点: 成员变量:编译看左边,运行看左边 成员方法:编译看左边,运行看右边 构造方法:创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。静态方法:编译看左边,运行看左边 成员方法存在方法的重写,所以运行看右边 继承的时候: 子类中有和父类中一样的方法,叫重写 子类中没有父类中出现过的方法,方法被继承过来了。 抽象类的概述 特点:抽象类和抽象方法必须用abstract关键字修饰 抽象类的实例化是靠具体的子类进行实例化的 接口的特点: 接口不能实例化,以多态的方式实例化 成员变量:只能是常量,而且是静态的 1.Public int num=10; 2.Public final int num2=20; 3.Public static final i nt num3=30; 注:如果写成第一种方式的,那么它就是省略了第三种里面的static和final 接口中的变量默认是常量 接口没有构造方法,因为接口主要是扩展功能的,而没有具体存在 成员方法: 只能是抽象方法 默认修饰符public abstract 类与类,类与接口,接口与接口的关系 类与类继承关系,只能单继承,可以多层继承 类与接口实现关系 接口与接口:可以多继承,单继承 抽象类和接口之间的区别 抽象类: 1.成员区别:a,成员变量:可以是变量 2.构造方法:有

相关主题
相关文档
最新文档