内部类.txt 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. class 人{
  2. int 心脏;
  3. 肝脏
  4. 脾脏
  5. 肾脏
  6. 大肠
  7. 小肠
  8. }
  9. 汽车{
  10. String 发动机
  11. }
  12. 内部类
  13. 在一个类中定义一个类。比如在A类中定义B类,B类就是内部类。
  14. 格式:
  15. class 外部类名{
  16. 修饰符 class 内部类名{
  17. }
  18. }
  19. 内部类的特点:
  20. 1、内部类可以直接访问外部类的成员,包括私有的private修饰的。
  21. 2、外部类要访问内部类的成员,就必须要创建对象。
  22. 创建内部类对象的格式:
  23. //创建内部类的对象
  24. // 外部类.内部类 内部类对象名=new 外部类().new 内部类();
  25. Car.Engine ce=new Car().new Engine();
  26. 在一个类中设计内部类的目的,大部分都是不行让外界访问,而是只想自己使用。
  27. 所以一般内部类都应该是私有化的,私有化之后,再提供一个可以让外界访问的
  28. 方法。方法内部创建内部类的对象并且调用。
  29. 内部类的划分:
  30. 1、成员内部类,建立在类中,方法外。和类的成员处于同一级别。
  31. |-普通的成员内部类
  32. |-静态成员内部类
  33. 访问格式:外部类名.内部类名 对象名=new 外部类名.内部类名();
  34. 2、局部内部类,建立在类中的方法中,属于方法的局部变量级别。
  35. 局部内部类,外界是无法直接访问的,需要在方法的内部类创建对象并使用。
  36. 局部内部类可以直接访问外部类的成员,也可以访问方法内的局部变量。
  37. //局部内部类,建立在方法中
  38. public void method() { //外部类的方法
  39. class Inner { //方法内的内部类--局部内部类
  40. public void show() { //内部类中的方法
  41. System.out.println("内部类的方法...");
  42. }
  43. }
  44. //局部内部类在方法中定义完,就要在方法中使用,否则就没有使用的机会了。
  45. Inner inner=new Inner();
  46. inner.show();
  47. }
  48. 3、匿名内部类
  49. 匿名内部类的前提,先存在一个类或接口,这个类可以是具体类,也可以是抽象类
  50. 匿名内部类的格式:
  51. new 类名(){
  52. 重写方法
  53. }
  54. 比如:
  55. //创建类的对象,后面增加大括号,大括号内部重写类的方法。
  56. UserDao userDao=new UserDao() {
  57. @Override
  58. public void addUser() {
  59. }
  60. };
  61. 匿名内部类的本质:
  62. 其实是一个继承了该类或实现了该接口的子类(实现类)的匿名对象。
  63. 就是创建一个父类(接口)的一次性的子类(实现类),并且立刻创建这个子类或实现类的对象。
  64. 就又变成了父类的引用,指向子类的对象---多态。
  65. 匿名内部类在开发中的使用:
  66. 当我们发现了某个方法需要一个接口(抽象类)的子类对象,那么我们就可以传递进去一个匿名内部类,
  67. 简化传统的创建接口或抽象类的子类,然后再创建对象的过程。