JAVA:接口与抽象类

上传人:xx****x 文档编号:243023255 上传时间:2024-09-14 格式:PPT 页数:31 大小:67KB
返回 下载 相关 举报
JAVA:接口与抽象类_第1页
第1页 / 共31页
JAVA:接口与抽象类_第2页
第2页 / 共31页
JAVA:接口与抽象类_第3页
第3页 / 共31页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Java面向对象程序设计,接口与抽象类,1,教学内容,接口的概念、定义接口方法,集合接口的应用,抽象类的概念,接口与抽象类的区别,2,教学目标,理解和掌握接口的定义,掌握实现接口的方法,掌握集合及其集合接口的应用,理解List接口,理解抽象类的概念,理解接口与抽象类的区别,3,8.1引例,例8.1组装电脑:通过PCI接口将主板与显卡和声卡连接。,分析:,很多教材在介绍接口时大多使用组装电脑作为案例,本章也选择大家熟悉的组装电脑作为引例。实际上,无论是显卡还是声卡,都是插在PCI槽上的,所以,首先定义一个PCI接口,然后定义显卡类和声卡类实现PCI接口,从而它们的对象能直接传递给PCI接口的对象,在参数传递过程中实现接口回调。,4,/ Jpro8_1.java,interface PCI,void setName(String s);,void run();,class VideoCard implements PCI,String name=微星;,public void setName(String s),name=s;,public void run(),System.out.println(name+显卡已开始工作!);,class SoundCard implements PCI,String name=AC;,public void setName(String s),name=s;,public void run(),System.out.println(name+声卡已开始工作!);,8.1引例(续),5,8.1引例(续),class Mainboard,public void interfacePCI(PCI p),p.run();,public void run(),System.out.println(主板已开始工作!);,public class Jpro8_1,public static void main(String args),Mainboard mb=new Mainboard();,VideoCard vc=new VideoCard();,vc.setName(HuaWei);,SoundCard sc=new SoundCard();,mb.interfacePCI(vc);,mb.interfacePCI(sc);,mb.run();,6,8.2 接口,接口就是方法定义和常量值的集合。接口又称界面,引入接口的目的是为了克服Java单继承机制带来的缺陷,实现类的多继承的功能。Java的接口在语法上类似于类的一种结构,但是接口与类有很大的区别。它只有常量定义和方法声明,没有变量和方法的实现。,接口还可以用来实现不同类之间的常量共享。,7,8.2.1 定义接口,接口是一种特殊的类,只定义了类中方法的原型,而没有直接定义方法的内容。接口的定义包括接口声明和接口体两部分,格式如下:,public|abstract interface 接口名 extends 接口列表,常量声明;,方法声明;,接口的修饰符可以是public或abstract,其中public或abstract可以缺省。public的含义与类修饰符是一致的。但是缺省public或abstract修饰符时,定义的接口只能被同一个包中的其他类和接口使用。,8,8.2.1 定义接口(续),下面是一个接口定义的例子:,public interface Shape,float width=9.8f;,float height=6.6f;,public float girth();,public float area();,上面程序段定义了一个名为Shape的接口,其中有两常量width和height,以及两个抽象方法girth()和area()。,与类一样,接口也具有继承性。定义接口时可以使用extends关键字定义该新接口是某个已经存在的父接口的派生接口,它将继承父接口的所有属性和方法。与类的单继承不同,一个接口可以有多个父接口,接口名称之间用“,”分隔。新的接口将继承所有父接口的属性和方法。,9,8.2.2 接口实现,在类中实现接口的格式如下:,类修饰符 class 类名 extends 父类名 implements 接口名列表,其中,接口名列表包括多个接口名称,各接口间用逗号分隔。implements是实现接口的关键字。实现接口的类,如果不是抽象类,就必须实现接口中定义的所有方法,并给出具体的实现代码,当然还可以使用接口中定义的任何常量。,10,例8.2 接口的实现示例。,/Jpro8_2.java,interface Shape /定义一个接口Shape,double PI=3.14;,void print();,class Circle implements Shape / 实现接口Shape,public void print(),System.out.println(我实现了接口+PI);,public class Jpro8_2,public static void main(String args),Circle circle=new Circle();,circle.print();,8.2.2 接口实现(续),11,实现接口时,需要注意以下问题:,1如果实现接口的类不是abstract修饰的抽象类,那么在类的定义部分必须实现接口中定义的所有方法,并给出具体的实现代码。这是因为非抽象类中不可以存在抽象方法。,2如果实现接口的类是abstract修饰的抽象类,那么它可以不实现该接口的所有抽象方法。,3在实现接口方法时,必须将方法声明为公共方法(public),而且还要将方法的参数列表、名称和返回值与接口中定义的完全一致。,4如果在实现接口的类中所实现的方法与抽象方法有相同的方法名称和不同的参数列表,则只是重载了一个新的方法,并没有实现接口中的抽象方法。,5接口的抽象方法的访问修饰符规定为public,则类在实现这些抽象方法时,必须显式地使用public修饰符,否则系统提示出错警告。,6如果接口中的方法的返回类型不是void,则在类中实现该方法时,方法体中至少要有一条return语句。,8.2.2 接口实现(续),12,8.3 集合接口,Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口和实现接口的实现类组成。一般来说,理解了集合接口就容易掌握集合框架。Java平台提供了6个集合接口,不同接口用来描述一组不同数据类型。,13,8.3.1 Collection接口,Collection是在java.util包中的接口,是整个Java集合框架中的基石。Collection接口的声明如下:,public interface Collection,Collection接口是其他接口的父接口,它定义了集合框架中一些最基本的方法。除了Collection接口外,其他常用的还有Set、List这两大类。,Collection跟数组最大的不同是数组有容量大小的限制,而Collection没有。此外,Collection中存放的都是对象,即使是基本类型也要转换为对象类型。Collection中的数据称之为元素。这些元素没有特定的顺序,元素也可以重复。,14,8.3.1 Collection接口(续),方法名称,含义,public boolean add(Object o),将对象添加到集合中,public boolean contains(Object o),查找集合中是否含有对象o,public boolean equals(Object o),判断集合是否等价,public Iterator iterator(),返回一个迭代器,用来访问集合中的元素,public boolean remove(Object o),删除集合中的对象o,public int size(),返回集合中元素的个数,public Object toArray(),以数组的形式返回集合中的元素,15,8.3.2 List接口,方法名称,含义,public boolean addAll(int index,Collection co),将集合对象添加到集合的制定位置,Object get(int index),通过索引号返回指定元素,Object set(int index, Object element),把指定索引处的元素替换为新的元素,ListIterator listIterator(int index),返回指定初始位置的列表迭代器,int indexOf(Object o),返回指定元素在列表中的索引(最小值),如果不存在该元素,返回-1,void add(int index, Object element),在指定索引处插入一个元素,原来该索引处元素以及后面的元素后移,List subList(int fromIndex, int toIndex),返回当前List的一个视图,在使用List接口时注意以下两点:,(1)所有的索引返回的方法都有可能抛出一个IndexOutOfBoundsException异常。,(2)subList(int fromIndex, int toIndex)返回的是包括fromIndex,不包括toIndex的视图,该列表的长度为toIndex-fromIndex。,16,8.3.2 List接口(续),例8.3 添加与删除List中的元素。,/ Jpro8_3.java,import java.util.*;,public class Jpro8_3 ,public static void main(String args) ,List list = null ;,list = new ArrayList();,list.add(Beijing);,list.add(0, );,list.add(Anhui);,list.add(Shanghai);,list.remove(0);,list.remove(Anhui );,System.out.println(list);,17,8.3.3 Set接口,Set集合由Set接口与Set接口的实现类组成。与List集合不同的是,Set集合中的对象不按特定的方式排序,只要简单将对象加入集合中,但是不能有重复对象。Set接口继承了Collection接口,因此包含了Collection接口的所有方法。,要使用Set集合,先声明为Set类型,然后通过Set接口的实现类来实例化。Set接口的常用实现类是HashSet和TreeSet类。,例如:,Set set=new HashSet();,就声明了一个Set实例。,要获取Set集合对象,先生成Iterator对象,再通过迭代器来获取集合中的对象,如:,Iterator it=set.iterator();,while(it.hasNext(),System.out.print(it.next()+” “);,由于Set集合中的对象不能重复,因此可以使用Set集合中的addAll()方法将Collection集合中添加到Set集合中,以除去重复对象。,18,例8.4 首先创建一个List对象,并添加元素,然后将List集合中的元素添加到Set集合中,则会除去其中重复的元素。,/ Jpro8_4.java,import java.util.*;,public class Jpro8_4 ,public static void main(String args) ,List list = new ArrayList();/,创建List集合对象,list.add(1);/向集合中添加元素,list.add(2);,list.add(3);,list.add(2);,Set set = new HashSet();/创建List集合对象,set.addAll(list);/将List集合添加到Set集合中,Iterator it = set.iterator();/创建Set集合迭代器,System.out.println(集合中的元素是:);,while (it.hasNext(),System.out.println(it.next();,8.3.3 Set接口,19,8.3.4 Iterator接口,Iterator接口位于java.util包中,用来遍历集合中的元素,它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。如果没有使用Iterator,遍历一个数组的方法是使用索引。,下面先看看Iterator接口的定义:,public interface Iterator ,boolean hasNext();,Object next();,void remove();,每一种集合类返回的Iterator具体类型可能不同。例如,Array可能返回ArrayIterator,Set可能返回SetIterator,Tree可能返回TreeIterator,但是它们都实现了Iterator接口,因此,客户端不关心到底是哪种Iterator,它只需要获得这个Iterator接口就可以了。,20,例8.5 Iterator接口的使用。,/ Jpro8_5.java,import java.util.*;,public class Jpro8_5 ,public static void main(String args) ,Collection c = new ArrayList();,c.add(a);,c.add(b);,Iterator it = c.iterator();,for(;it.hasNext();),String s = (String)it.next();,System.out.println(s);,8.3.4 Iterator接口,21,8.4 抽象类,抽象类的定义与一般类一样都有数据和方法,定义格式与一般类也非常类似,只是在定义类的class前增加一个关键字abstract就表示定义一个抽象类,即用abstract说明的类称为抽象类。,例如,定义一个抽象类Animal。,public abstract class Animal ,String name;,int age;,public abstract void go() ,22,8.4 抽象类(续),抽象方法一定包含在抽象类中,抽象方法同样不能直接实现,它只能在子类中被实现。,接口类似于抽象类,只是接口中的所有方法都是抽象的。这些方法必须由实现这一接口的类来实现。,Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供非抽象方法方法的实现,而Java接口中的所有方法都是抽象的。所以,如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都能很快得到这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为必须让每一个类都再实现这个方法才可以。,23,8.4 抽象类(续),例8.6下面例子定义一个抽象类,然后通过继承实现该抽象类。,/ Jpro8_6.java,abstract class Animal ,String name;,abstract void go() ;,class Cat extends Animal ,Cat(String name) ,this.name=name;,public void go() ,System.out.println(name+ can run.) ;,class Bird extends Animal ,Bird(String name) ,this.name=name;,public void go() ,System.out.println(name+ can fly.) ;,public class Jpro8_6 ,public static void main(String args) ,Cat c = new Cat(Cady) ;,Bird b = new Bird(Bird) ;,c.go() ;,b.go() ;,24,8.5 实例,例8.7接口可以象类一样实现多继承,请分析下面的程序。,分析:,接口类似于抽象类,但是它可以实现多继承机制。首先定义一个三个接口,然后定义一盒类实现这三个接口,然后应用接口回调实现方法效用。,25,8.5 实例(,例8.7续),/ Jpro8_7.java,interface CanFight ,void fight();,interface CanSwim ,void swim();,interface CanFly ,void fly();,class ActionCharacter ,public void fight() ,System.out.println(can fight!);,class Hero extends ActionCharacter implements CanFight,CanSwim,CanFly ,public void swim() ,System.out.println(can swim);,public void fly() ,System.out.println(can fly);,26,8.5 实例(,例8.7续),public class Jpro8_7 ,public static void t(CanFight x) ,x.fight();,public static void u(CanSwim x) ,x.swim();,public static void v(CanFly x) ,x.fly();,public static void w(ActionCharacter x) ,x.fight();,public static void main(String args) ,Hero h=new Hero();,t(h);,u(h);,v(h);,w(h);,27,8.5 实例(续),例8.8使用集合创建单选按钮:创建包含String对象的集合,然后通过遍历集合创建单选按钮。,分析:,本实例将创建两个单选按钮,请读者参照第11章的关于单选按钮的知识分析该例题。将按选按钮的标签存放到一个集合ArrayList中,在创建单选按钮时,通过get()方法从集合中获取标签。本实例用到第11章相关知识,大家也可以在学习第11章后回头再分析改程序。,28,/ Jpro8_8.java,import java.util.*;,import java.awt.*;,import java.awt.event.*;,import javax.swing.*;,public class Jpro8_8 extends JFrame implements ItemListener,JRadioButton b1, b2;,ButtonGroup bGroup;,JLabel label;,JScrollPane scroll;,JPanel panel;,JSplitPane split;,8.5 实例(,例8.8续),29,Jpro8_8() ,setSize(200, 100);,bGroup = new ButtonGroup();,setTitle(使用集合创建单选按钮);,Container c = getContentPane();,java.util.List list = new ArrayList();,list.add(Java);,list.add(C);,panel = new JPanel();,label = new JLabel();,scroll = new JScrollPane(label);,b1 = new JRadioButton(String) list.get(0);,b2 = new JRadioButton(String) list.get(1);,bGroup.add(b1);,bGroup.add(b2);,panel.add(b1);,panel.add(b2);,b1.addItemListener(this);,b2.addItemListener(this);,split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, panel, scroll);,c.add(split);,setVisible(true);,8.5 实例(,例8.8续),30,public void itemStateChanged(ItemEvent e) ,if (e.getItemSelectable() = b1),label.setText(Java);,if (e.getItemSelectable() = b2),label.setText(c);,public static void main(String args) ,new Jpro8_8();,8.5 实例(,例8.8续),31,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!