《【精品】Java实用教程第12讲内部类精品ppt课件.ppt》由会员分享,可在线阅读,更多相关《【精品】Java实用教程第12讲内部类精品ppt课件.ppt(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java实用教程第12讲内部类Java中可以把一个类的定义放在另一个类的内部,外面的类称为外围类,里面的类称为内部类。内部类可以与其所在的外围类进行通信。内部类可以分成员类、局部内部类、匿名内部类和静态内部类(嵌套类),下面就这几种内部类进行介绍。12.1 成员类成员类没有static修饰的内部类称为成员类,成员类的使用与普通类类似。示例代码如下:public class OuterClassOne class InnerOneprivate int i=1;InnerOne()System.out.println(InnerOne();public int getI()return i;pu
2、blic 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.testInnerClass();12.1 成员类成员类在外围类的testInnerClass方法中可以创建成员类的对象,并可以调用成员类的方法。那么我们可以在外围类的哪些地方创建其成员类的对象呢?下面的代码可以回答这个问题:public class
3、 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 OuterMethod2()OuterClassTwo outer1=new OuterClassTwo();InnerOne three=outer1.new InnerOne(3);public static void main(Stri
4、ng args)OuterClassTwo outer2=new OuterClassTwo();outer2.OuterMethod1();OuterMethod2();OuterClassTwo.InnerOne four=outer2.new InnerOne(4);12.1 成员类成员类从上面的代码可以看出,成员类的对象依赖于其外围类的对象,也就是说,要想创建一个成员类的对象必须先创建一个其外围类的对象。成员类能够访问其外围类的所有成员,示例代码如下:public class OuterClassThree public int i=1;int j=2;protected int m=
5、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.out.println(n=+n);System.out.println(k=+k);public static void main(String args)new OuterClassThree().new InnerOne().show();12.3 匿名内部类匿名内部类如果一个局部内部类没有名字,
6、那么这个类称为匿名内部类。一个匿名内部类要么继承一个类(或抽象类),要么实现一个接口。示例代码如下:/首先声明一个类和接口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()publ
7、ic 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方法。示例代码如下:public clas
8、s 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 OuterMethodOne()InnerOne tw
9、o=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 NestedClassOne().OuterMethodOne();/从上面的代
10、码可以看出嵌套类的对象并不依赖于其外围类从上面的代码可以看出嵌套类的对象并不依赖于其外围类的对象,并且不能从嵌套类对象中访问其外围类对象的非静态成员。的对象,并且不能从嵌套类对象中访问其外围类对象的非静态成员。12.4 静态内部类静态内部类众所周知,接口中只能放置final的域和抽象方法。但嵌套类是static的,所以可以放在接口中定义,甚至可以实现这个接口,示例代码如下:public interface NestedInterface int i=1;void show();static class InnerOne implements NestedInterface public voi
11、d show()System.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 PlaneW
12、heel 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 Oneinterface Twoclass A implements One,Twoclass B impleme
13、nts Oneclass Inner implements Twopublic 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,其内部类Inne
14、r实现了接口Two。如果被继承的不是接口而是类或抽象类的话,那么只能采用内部类才能实现“多继承”。示例代码如下:class TestAclass TestBclass TestC extends TestAclass Inner extends TestBpublic class MultiInheritTwo static void show(TestA a)static void show(TestB b)public static void main(String args)TestC c=new TestC();show(c);show(c.new Inner();12.7 本讲小结本讲小结本讲首先讲述了各种内部类的特点,包括成员类、局部内部类、匿名内部类和静态内部类,其次讲述了内部类的继承和使用内部类的好处。讲后练习讲后练习1、在静态方法中怎么创建成员类的对象?2、总结各种内部类在编译后生成的.class文件的命名。3、使用内部类有什么好处?