- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.3 内部类 6.3.3 匿名内部类 public class Car { public void drive(){ System.out.println(Driving a car!); } public static void main(String[] args) { Car car = new Car(){ public void drive() { System.out.println(Driving another car!); } }; car.drive(); } } 继承式匿名内部类 6.3 内部类 6.3.3 匿名内部类 interface Vehicle { public void drive(); } class Test{ public static void main(String[] args) { Vehicle v = new Vehicle(){ public void drive(){ System.out.println(Driving a car!); } }; v.drive(); } } 接口式匿名内部类 6.3 内部类 6.3.3 匿名内部类 class Bar{ void doStuff(Foo f) { f.foo(); } } interface Foo{ void foo(); } class Test{ static void go(){ Bar b = new Bar(); b.doStuff(new Foo(){ public void foo(){System.out.println(foofy);} }); } } 参数式匿名内部类 6.3 内部类 6.3.3 静态内部类 当内部类前有static关键字时,该内部类为静态内部类 静态内部类是外部类的静态成员,其不依赖于外部类的对象存在,因此在创建该种内部类的对象时,不需要先把外部类的对象创建出来。 外部类类名.内部类类名 引用变量= new 外部类类名.内部类构造器 静态嵌套类仅能访问外部类的静态成员和方法。 6.3 内部类 6.3.3 静态内部类 class Outer{ static class Inner{} } class Test { public static void main(String[] args){ Outer.Inner n = new Outer.Inner(); } } 为什么需要内部类 典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。 使用内部类最吸引人的原因是: 每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。 本章小结 抽象类主要用来表示一组类的共有属性和行为,不对应客观世界中的任何对象;具体类表示的是某一类对象的共同属性和行为,它们与客观世界的对象是一一对应的。 抽象类是不能实例化的类,定义时需要使用abstract修饰符声明,抽象类中可以包含抽象方法,也可以包含具体方法。抽象方法是指只有声明而没有实现的方法,在类中声明时需要使用abstract修饰符。注意,抽象类不能定义为final类。 本章小结 抽象方法的实现必须通过抽象类的子类来实现。对于抽象类的使用问题主要就是对它的继承以及对其中的抽象方法的重写问题。继承抽象类的子类必须全部实现抽象类所定义的抽象方法,否则该子类也必须声明为抽象类。 抽象类的引用来自继承它的子类的实例,即抽象类的引用是一个抽象类子类的向上转型对象,通过这个抽象类型的向上转型对象,可以实现对象的多态性。使用抽象类型向上转型对象在运行时将调用子类对象中继承或重写的方法。 本章小结 接口实质就是一个抽象类,但接口只关心功能,并不关心功能的具体实现。所以在接口中的方法只有声明,而没有任何实现。 定义接口需要使用关键字interface。在接口中声明的方法默认是公共的和抽象的。实现接口时必须实现接口中的所有方法。在类实现接口方法时应在方法前添加修饰符public,并且如
文档评论(0)