【黑马程序员】内部类学习

来源:互联网 发布:注册短信验证php 编辑:程序博客网 时间:2024/06/05 15:01

------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ---

class A{   

public static class B{}
public class C{ private class D{} } 
public fun(int){ class E{} }
}

1.顶层类A必须是public或frendly.成员内部类可以是各种访问级别。


2.内部类分为成员内部类和局部内部类E。成员内部类分为:
实例内部类C,D和静态内部类B。
(1)实例内部类:
a。实例内部类创建前必须先创建外部类,

A a=new A();

 A.C c=a.new C;

b。实例内部类自动用友外部类实例的应用,可以访问外部类
的所有成员。多重嵌套中可以访问所有外部类。
c。外部类只能访问内部类实例。
d。实例内部类中不能定义静态成员
e。如果AB有同名成员。在B内:this.v表示B的成员,
A.this.v表示A的成员
(2)静态内部类:
a。A.B=new A.B();
b.作为内部成员可以访问外部类的私有静态成员。(顶层类的
公有静态成员本来就是所有类都能访问的)除此之外B就和普
通的类一样。A对于B来说和包名差不多。
(3)局部内部类:在方法中
a。局部内部不能用任何访问控制符修饰,不能包含静态成员2
2.内部类的继承:
(1)若一个外部类F继承了另一个外部类A的内部类C
public class F extends A.C{...}
 F中必须要有一个接受外部类对象的构造函数。
public F(A a){a.super();...}(编译器会检查)
创建F: F f=new F(new A);
(2)在外部类外创建实例内部类的对象时,
A.C c=new A(...).new C(...)
3.匿名类
A a=new A(v){....};
等价于:SubA extends A{ .....};
A a=new SubA(v);
Sub类定义在语句中,是局部类,所以不能有静态化初始代码
块。
(1)匿名类本身没有构造方法,但是会调用父类的构造方法
。如果v是局部变量,并且会在匿名类中用到,必须是final
A a=new A(v){{....}  //匿名类实例初始化代码,相当于匿名构造函数,//会在父类构造函数之后被调用。int xxx;void fun(xxx){}; //匿名类成员}
类体中的代码块可以有无数块,都是在创建对象时执行,在构
造函数之前,代码块之间执行的顺序取决去他们在类体内的顺序。
(2)匿名类除了继承类之外,还可以实现接口
4.类中可以定义接口

接口只能可以定义静态内部类


5.内部类
(1)回调:客户类通过一个外部类的内部类来获得外部类的
功能。用于:当外部类想要实现的接口与自身成员相冲突时。


总结:某个区域内的代码的对某类的访问权关键看能否唯一确

定这个类,不会有歧义

------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ---

0 0
原创粉丝点击