Java实用教程第12讲内部类ppt课件_第1页
Java实用教程第12讲内部类ppt课件_第2页
Java实用教程第12讲内部类ppt课件_第3页
Java实用教程第12讲内部类ppt课件_第4页
Java实用教程第12讲内部类ppt课件_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第12讲 内部类 12.1成员类成员类 12.2 部分内部类部分内部类 12.3 匿名内部类匿名内部类 12.4 静态内部类静态内部类 12.5 内部类的承继内部类的承继 12.6 内部类的益处内部类的益处 12.7 本讲小结本讲小结 Java中可以把一个类的定义放在另一个类的内部,外面的类称为外围类,里面的类称为内部类。内部类可以与其所在的外围类进展通讯。 内部类可以分成员类、部分内部类、匿名内部类和静态内部类嵌套类,下面就这几种内部类进展引见。12.1 成员类成员类 没有static修饰的内部类称为成员类,成员类的运用与普通类类似。例如代码如下: public class OuterCla

2、ssOne class InnerOneprivate int i = 1;InnerOne()System.out.println(InnerOne();public int getI()return i;public void testInnerClass()InnerOne one = new InnerOne();int a = one.getI();System.out.println(a);public static void main(String args) OuterClassOne outer = new OuterClassOne();outer.testInnerCla

3、ss(); 12.1 成员类成员类在外围类的testInnerClass方法中可以创建成员类的对象,并可以调用成员类的方法。那么我们可以在外围类的哪些地方创建其成员类的对象呢?下面的代码可以回答这个问题:public class OuterClassTwo InnerOne one = new InnerOne(1);class InnerOneInnerOne(int i)System.out.println(i+:InnerOne);public void OuterMethod1()InnerOne two = new InnerOne(2);public static void Out

4、erMethod2()OuterClassTwo outer1 = new OuterClassTwo();InnerOne three = outer1.new InnerOne(3);public static void main(String args) OuterClassTwo outer2 = new OuterClassTwo();outer2.OuterMethod1();OuterMethod2();OuterClassTwo.InnerOne four = outer2.new InnerOne(4);12.1 成员类成员类从上面的代码可以看出,成员类的对象依赖于其外围类的

5、对象,也就是说,要想创建一个成员类的对象必需先创建一个其外围类的对象。成员类可以访问其外围类的一切成员,例如代码如下:public class OuterClassThree public int i = 1; int j = 2; protected int m = 3; private int n = 4; static int k = 5; class InnerOne public void show() System.out.println(i = +i); System.out.println(j = +j); System.out.println(m = +m); System.

6、out.println(n = +n); System.out.println(k = +k); public static void main(String args) new OuterClassThree().new InnerOne().show();12.2 部分内部类部分内部类 可以在一个方法内或者在一个作用域内定义内部类,称为部分内部类。下面代码展现了在一个方法内部定义的内部类。 interface MyInterfacevoid print(); public class OuterClassFive public MyInterface showInnerClass() cl

7、ass InnerOne implements MyInterface public void print() System.out.println(implementation); return new InnerOne(); public static void main(String args) new OuterClassFive().showInnerClass().print(); 12.2 部分内部类部分内部类 下面代码展现了在恣意的作用域内嵌入式一个内部类: public class OuterClassSix private int showInnerClass(boolea

8、n b)if(b)class InnerOneprivate int i = 1;public int getI()return i;InnerOne one = new InnerOne();return one.getI();else return 0;public static void main(String args) boolean b = true;/boolean b = false;int a = new OuterClassSix().showInnerClass(b);System.out.println(a); 12.3 匿名内部类匿名内部类 假设一个部分内部类没有名字

9、,那么这个类称为匿名内部类。一个匿名内部类要么承继一个类或笼统类,要么实现一个接口。例如代码如下: /首先声明一个类和接口 class AClassAClass()System.out.println(AClasss); interface AInterfaceint j = 2;void show(); 12.3 匿名内部类匿名内部类public class OuterClassSeven public AClass getObjectOne()return new AClass();public AInterface getObjectTwo()return new AInterface(

10、)public void show()System.out.println(AInterface);public static void main(String args) OuterClassSeven outer = new OuterClassSeven();outer.getObjectOne();outer.getObjectTwo().show();12.4 静态内部类静态内部类 假设不需求内部类对象与其外围类对象之间有联络,那么可以将内部类声明为static,这样的内部类称为嵌套类。嵌套类没有衔接到其外围类的this援用,它类似于其外围类的一个static方法。 例如代码如下:

11、public class NestedClassOne private int i = 1;InnerOne one = new InnerOne();static class InnerOneprivate int m = 2;public static int n = 3;public void show()System.out.println(m = +m);System.out.println(n = +n);/System.out.println(i);/非法访问public static int get()return n;12.4 静态内部类静态内部类/(接上)void Oute

12、rMethodOne()InnerOne two = new InnerOne();two.show();int k = two.get();static void OuterMethodTwo()InnerOne three = new InnerOne();three.show();three.get();public static void main(String args) int x = NestedClassOne.InnerOne.get(); System.out.println(x = +x); NestedClassOne.OuterMethodTwo(); new Nes

13、tedClassOne().OuterMethodOne(); /从上面的代码可以看出嵌套类的对象并不依赖于其外围类的对象,并且不能从嵌套类对象中访问其外围类对象的非静态成员。12.4 静态内部类静态内部类 众所周知,接口中只能放置final的域和笼统方法。但嵌套类是static的,所以可以放在接口中定义,甚至可以实现这个接口,例如代码如下: public interface NestedInterface int i = 1; void show(); static class InnerOne implements NestedInterface public void show() Sy

14、stem.out.println(i = +i); public static void main(String args) new NestedInterface.InnerOne().show(); 12.5 内部类的承继内部类的承继 由于内部类的对象必需依赖于其外围类的对象而存在,所以这使对内部类的承继变得复杂。在承继一个内部类时,其外围类的对象必需被初始化,所以在子类的构造方法中必需传入父类的外围类的援用。例如代码如下: class Carclass WheelWheel(int i)System.out.println(Wheel:+i); public class PlaneWhe

15、el extends Car.Wheel PlaneWheel(Car c,int i) c.super(i);/可以对比c.new Wheel(i);进展了解 public static void main(String args) new PlaneWheel(new Car(),4); 12.6 内部类的益处内部类的益处 Java是单承继的,即一个类只能有一个父类。而接口只实现了部分多承继的益处,接口和内部类使Java中的“多承继变得更加完美。例如代码如下: interface One interface Two class A implements One,Two class B im

16、plements Oneclass Inner implements Two public class MultiInheritOne static void showOne(One one) static void showTwo(Two two)public static void main(String args) A a = new A();B b = new B();showOne(a);showTwo(b.new Inner(); 12.6 内部类的益处内部类的益处 由于接口是可以多承继的,所以类A实现了两个接口,从而实现“多承继。而类B采用内部类的方式实现“多承继,类B实现了接口One,其内部类Inner实现了接口Two。假设被承继的不是接口而是类或笼统类的话,那么只能采用内部类才干实现“多承继。例如代码如下: class TestA class TestB class TestC extends TestAclass Inner extends TestB public class MultiInheritTwo static void show(TestA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论