【教学课件】第9章类的高级特性.ppt
《【教学课件】第9章类的高级特性.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第9章类的高级特性.ppt(66页珍藏版)》请在三一办公上搜索。
1、第9章 类的高级特性,本章要点,掌握抽象类的使用掌握内部类的分类掌握成员/局部/匿名/静态内部类的使用掌握内部类的继承了解Class类与Java反射,第9章 类的高级特性,9.1 抽象类9.2 内部类9.3 Class类与java反射,主要内容,9.1 抽象类,所谓抽象类就是只声明方法的存在而不去具体实现它的类。抽象类不能被实例化,也就是不能创建其对象在定义抽象类时,要在关键字class前面加上关键字abstract。定义抽象类,格式如下所示:abstract class 类名 类体,9.1 抽象类,在抽象类中创建的,没有实际意义的,必须要子类重写的方法称为抽象方法。抽象方法只有方法的声明,而
2、没有方法的实现,用关键字abstract进行修饰。声明一个抽象方法的基本格式如下所示:,abstract 方法名(参数列表);,9.1 抽象类,包含一个或多个抽象方法的类必须被声明为抽象类。抽象类中既可以有抽象方法,也可以有一般的成员方法。抽象方法不能使用private、static和final关键字进行修饰。抽象类主要用来派生子类,在子类中应实现抽象类所有抽象方法,如果子类中仍有未实现的抽象方法,则子类必须声明为抽象类。,abstract class Telphone public abstract void call();public abstract void message();cla
3、ss CellPhone extends Telphone Override public void call()System.out.println(通过键盘打电话);Override public void message()System.out.println(通过键盘发短信);,class SmartPhone extends Telphone Override public void call()System.out.println(通过语音打电话);Override public void message()System.out.println(通过语音发短信);,public c
4、lass Initial public static void main(String args)Telphone tel1=new CellPhone();tel1.call();tel1.message();Telphone tel2=new SmartPhone();tel2.call();tel2.message();,通过键盘打电话通过键盘发短信通过语音打电话通过语音发短信,public abstract class Animal protected String type;protected String name;public Animal(String type,String
5、name)this.type=type;this.name=name;public String toString()return type+name;public abstract void sound();,public class Cat extends Animal public Cat(String name)super(Cat,name);public void sound()System.out.println(miaomiao);,public class Dog extends Animal public Dog(String name)super(Dog,name);pub
6、lic void sound()System.out.println(WangWang);,public class Test public static void main(String args)Animal a=new Dog(dd),new Cat(cc);for(int i=0;ia.length;i+)System.out.print(ai+);ai.sound();,Dog dd WangWangCat cc miaomiao,9.2 内部类,9.2.1 成员内部类9.2.2 局部内部类9.2.3 匿名内部类9.2.4 静态内部类,9.2 内部类,Java中类可以嵌套定义,即在一
7、个类定义中,还可以嵌套另外一个类的定义,被嵌套的类称为内部类。没有嵌套在任何类中的类被称为顶层类。,9.2.1 成员内部类,1)如果内部类没有被声明为静态的,则不能含有静态成员。2)内部类也是一种类成员。若该内部类没有用声明为private,则在外部类外引用它,需要给出完整的类名称:外部类名.内部类名。3)外部类中可以直接引用内部类名称创建类对象,但如果在该外部类之外,即使具有引用内部类权限,也要首先创建一个外部类对象,才能借助于该对象创建内部类的对象。,9.2.1 成员内部类,9.2.1 成员内部类,在内部类中可以随意使用外部类的成员方法以及成员变量,即使这些类成员为private。但内部类
8、的成员只有在内部类的范围内访问,不能直接被外部类使用。,public class OuterClass InnerClass in=new InnerClass();public void ouf()in.inf();/在外部类方法中调用内部类方法 class InnerClass InnerClass()/内部类构造方法 public void inf()/内部类成员方法 int y=0;/定义内部类成员变量 public InnerClass doIt()/y=4;/外部类不可以直接访问内部类成员变量 in.y=4;return new InnerClass();/返回内部类引用 publ
9、ic static void main(String args)OuterClass out=new OuterClass();OuterClass.InnerClass in=out.doIt();,【例9-2】,9.2.1 成员内部类,内部类的实例一定要绑定在外部类的实例上,如果在外部类中初始化一个内部类对象,那么内部类对象就会绑定在外部类对象上。内部类初始化方式与其他类初始化方式相同,都是使用new关键字。,public class myapp public static void main(String args)OutClass out=new OutClass();out.crea
10、te();OutClass.InClass outin=out.new InClass();(外部类外:);outin.f();class OutClassint n;class InClassvoid f()System.out.println(n:+(+n);void create()InClass in=new InClass();(外部类中:);in.f();,外部类中:n:1外部类外:n:2,9.2.1 成员内部类,2)使用this关键字获取内部类与外部类的引用如果在外部类中定义的成员变量与内部类的成员变量名称相同,可以使用this关键字。,9.2.1 成员内部类,【例9-3】在项目
11、中创建TheSameName类,在类中定义成员变量x,定义一个内部类Inner,并在内部类中也创建x变量,在内部类的doIt()方法中分别操作两个x变量,代码如下所示。,public class TheSameName private int x;private class Inner private int x=9;public void doit(int x)x+;this.x+;+;,9.2.2 局部内部类,局部内部类就是在类的方法中定义的内部类,它的作用范围也是在这个方法体内,在这个方法体之外不能访问该内部类,但该内部类可以访问当前代码块的常量以及此外部类的所有成员。,9.2.2 局部
12、内部类,【例9-4】在外部类的sell()方法中创建Apple局部内部类,然后创建该内部类的实例,并调用其定义的price()方法输出单价信息。,9.2.3 匿名内部类,在编写程序代码时,不一定要给内部类取一个名字,可以直接以对象名来代替。匿名内部类的所有实现代码都需要在大括号之间进行编写。匿名内部类的语法如下所示:return new A()./内部类体;A:对象名,9.2.3 匿名内部类,由于匿名内部类没有名称,所以匿名内部类使用默认构造方法来生成匿名内部类的对象。在匿名内部类定义结束后,需要加分号标识,这个分号并不是代表定义内部类结束的标识,而是代表创建匿名内部类的引用表达式的标识。,9
13、.2.3 匿名内部类,匿名内部类由于没有名字,所以它的创建方式有点儿奇怪。创建格式如下:new 父类构造器(参数列表)|实现接口()/匿名内部类的类体部分,abstract class Person public abstract void eat();class Child extends Person public void eat()System.out.println(eat something);public class Demo public static void main(String args)Person p=new Child();p.eat();,【匿名内部类例1】,a
14、bstract class Person public abstract void eat();public class Demo public static void main(String args)Person p=new Person()public void eat()System.out.println(eat something);p.eat();,【匿名内部类例1】,abstract class Bird private String name;public String getName()return name;public void setName(String name)
15、this.name=name;public abstract int fly();,【匿名内部类例2】,public class Test public void test(Bird bird)System.out.println(bird.getName()+bird.fly();public static void main(String args)Test test=new Test();test.test(new Bird()public int fly()return 10000;public String getName()return 大雁;);,【匿名内部类例2】,9.2.4
16、静态内部类,在内部类前添加修饰符static,这个内部类就变为静态内部类。一个静态内部类中可以声明static成员,但是在非静态内部类中不可以声明静态成员。静态内部类不可以使用外部类的非静态成员。,9.2.4 静态内部类,静态内部类具有以下两个特点:创建静态内部类的对象,不需要其外部类的对象。不能从静态内部类的对象中访问非静态外部类的对象。,9.2.4 静态内部类,【例9-6】在静态内部类中定义main()方法,并访问内部类中的方法。,public class StaticInnerClassDemo static int x=100;static class Inner static voi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 高级 特性
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5659648.html