《最新Java实用教程第12讲内部类(共18张PPT课件).pptx》由会员分享,可在线阅读,更多相关《最新Java实用教程第12讲内部类(共18张PPT课件).pptx(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第12讲 内部(nib)类 12.1成员类成员类 12.2 局部内部类局部内部类 12.3 匿名内部类匿名内部类 12.4 静态静态(jngti)内部类内部类 12.5 内部类的继承内部类的继承 12.6 内部类的好处内部类的好处 12.7 本讲小结本讲小结第一页,共十八页。 Java中可以(ky)把一个类的定义放在另一个类的内部,外面的类称为外围类,里面的类称为内部类。内部类可以(ky)与其所在的外围类进行通信。 内部类可以分成员类、局部内部类、匿名内部类和静态内部类(嵌套类),下面就这几种内部类进行介绍。第二页,共十八页。12.1 成员成员(chngyun)类类没有static修饰的内部类
2、称为成员(chngyun)类,成员(chngyun)类的使用与普通类类似。示例代码如下:public class OuterClassOne 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 a
3、rgs) OuterClassOne outer = new OuterClassOne();outer.testInnerClass();第三页,共十八页。12.1 成员成员(chngyun)类类在外围(wiwi)类的testInnerClass方法中可以创建成员类的对象,并可以调用成员类的方法。那么我们可以在外围(wiwi)类的哪些地方创建其成员类的对象呢?下面的代码可以回答这个问题:public class OuterClassTwo InnerOne one = new InnerOne(1);class InnerOneInnerOne(int i)System.out.printl
4、n(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(String args) OuterClassTwo outer2 = new OuterClassTwo();outer2.OuterMethod1();OuterMetho
5、d2();OuterClassTwo.InnerOne four = outer2.new InnerOne(4);第四页,共十八页。12.1 成员成员(chngyun)类类从上面的代码可以看出,成员类的对象依赖于其外围类的对象,也就是说,要想创建一个成员类的对象必须(bx)先创建一个其外围类的对象。成员类能够访问其外围类的所有成员,示例代码如下:public class OuterClassThree public int i = 1; int j = 2; protected int m = 3; private int n = 4; static int k = 5; class Inn
6、erOne 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.2 局部局部(jb)内部类内部类可以在一个方法内或者在一个作用域内定义内部类,称为局
7、部(jb)内部类。下面代码展示了在一个方法内部定义的内部类。interface MyInterfacevoid print();public class OuterClassFive public MyInterface showInnerClass() class InnerOne implements MyInterface public void print() System.out.println(implementation); return new InnerOne(); public static void main(String args) new OuterClassFive
8、().showInnerClass().print();第六页,共十八页。12.2 局部局部(jb)内部类内部类下面代码展示(zhnsh)了在任意的作用域内嵌入式一个内部类:public class OuterClassSix private int showInnerClass(boolean 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(
9、String args) boolean b = true;/boolean b = false;int a = new OuterClassSix().showInnerClass(b);System.out.println(a);第七页,共十八页。12.3 匿名匿名(nmng)内部类内部类如果一个局部内部(nib)类没有名字,那么这个类称为匿名内部(nib)类。一个匿名内部(nib)类要么继承一个类(或抽象类),要么实现一个接口。示例代码如下:/首先声明一个类和接口class AClassAClass()System.out.println(AClasss);interface AInte
10、rfaceint j = 2;void show();第八页,共十八页。12.3 匿名匿名(nmng)内部类内部类public class OuterClassSeven public AClass getObjectOne()return new AClass();public AInterface getObjectTwo()return new AInterface()public void show()System.out.println(AInterface);public static void main(String args) OuterClassSeven outer = n
11、ew OuterClassSeven();outer.getObjectOne();outer.getObjectTwo().show();第九页,共十八页。12.4 静态静态(jngti)内部类内部类如果不需要内部类对象与其外围类对象之间有联系,那么可以将内部类声明为static,这样的内部类称为嵌套类。嵌套类没有连接(linji)到其外围类的this引用,它类似于其外围类的一个static方法。 示例代码如下: public class NestedClassOne private int i = 1;InnerOne one = new InnerOne();static class I
12、nnerOneprivate 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 静态静态(jngti)内部类内部类/(接上)void OuterMethodOne()InnerOne two = new InnerOne();two.show();int k = two.get();sta
13、tic 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(); /从上面的代码可以看出从上面的代码可以看出(kn ch)嵌套类的对象并不依赖于其外围
14、类的对象,嵌套类的对象并不依赖于其外围类的对象,并且不能从嵌套类对象中访问其外围类对象的非静态成员。并且不能从嵌套类对象中访问其外围类对象的非静态成员。第十一页,共十八页。12.4 静态静态(jngti)内部类内部类众所周知,接口中只能放置final的域和抽象方法。但嵌套类是static的,所以可以放在接口中定义(dngy),甚至可以实现这个接口,示例代码如下:public interface NestedInterface int i = 1; void show(); static class InnerOne implements NestedInterface public void
15、show() System.out.println(i = +i); public static void main(String args) new NestedInterface.InnerOne().show(); 第十二页,共十八页。12.5 内部内部(nib)类的继承类的继承因为内部类的对象必须依赖于其外围类的对象而存在,所以这使对内部类的继承变得复杂。在继承一个内部类时,其外围类的对象必须被初始化,所以在子类的构造方法中必须传入父类的外围类的引用。示例代码如下(rxi):class Carclass WheelWheel(int i)System.out.println(Wheel
16、:+i);public class PlaneWheel 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 内部内部(nib)类的好处类的好处Java是单继承的,即一个类只能有一个父类。而接口只实现了部分多继承的好处,接口和内部类使Java中的“多继承”变得更加完美(wnmi)。示例代码如下:interface Oneinterfa
17、ce Twoclass A implements One,Twoclass B implements 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 内部内部(nib)类的好处类的好处因为接口
18、是可以多继承的,所以类A实现了两个接口,从而实现“多继承”。而类B采用内部类的方式实现“多继承”,类B实现了接口One,其内部类Inner实现了接口Two。如果被继承的不是接口而是类或抽象类的话,那么只能采用内部类才能(cinng)实现“多继承”。示例代码如下:class TestAclass TestBclass TestC extends TestAclass Inner extends TestBpublic class MultiInheritTwo static void show(TestA a) static void show(TestB b)public static voi
19、d main(String args) TestC c = new TestC();show(c);show(c.new Inner();第十五页,共十八页。12.7 本讲小结本讲小结(xioji) 本讲首先讲述了各种内部类的特点,包括成员类、局部(jb)内部类、匿名内部类和静态内部类,其次讲述了内部类的继承和使用内部类的好处。第十六页,共十八页。讲后练习讲后练习(linx) 1、在静态方法中怎么创建成员类的对象? 2、总结各种内部类在编译后生成的.class文件的命名(mng mng)。 3、使用内部类有什么好处?第十七页,共十八页。内容(nirng)总结第12讲 内部(nib)类。12.7 本讲小结。private int i = 1。public static void main(String args) 。private int n = 4。static int k = 5。private int m = 2。public static int n = 3第十八页,共十八页。