内部类
1、什么是内部类及作用?
定义:定义在一个类里面的类就是内部类。
作用:可以提供更好的封装性, 内部类有更多权限修饰符 , 封装性有更多的控制。可以体现出组件的思想。
2、内部类的分类
(1)静态内部类 (2)成员内部类(3)局部内部类(4)匿名内部类。(重点)
(1)静态内部类:有static修饰,属于外部类本身,会加载一次。
类有的成分它都有,静态内部类属于外部类本身,只会加载一次。 所以它的特点与外部类是完全一样的,只是位置在别人里面而已。
静态内部类的访问格式:
外部类名称.内部类名称
静态内部类创建对象的格式:
外部类名称.内部类名称 对象名称 = new 外部类名称.内部类构造器;
(2)成员内部类:无static修饰的内部类,属于外部类的每个对象的,跟着对象一起加载的。
实例内部类的成分特点:
实例内部类中不能定义静态成员,其他都可以定义。
可以定义常量。
实例内部类的访问格式:
外部类名称.内部类名称。
创建对象的格式:
外部类名称.内部类名称 对象名称 = new 外部类构造器.new 内部构造器;
(3)局部内部类:定义在方法中,在构造器中,代码块中,for循环中定义的内部类
局部内部类中的成分特点:
只能定义实例成员,不能定义静态成员
可以定义常量的。
(4)匿名内部类:一个没有名字的局部内部类。目的:简化代码,也是开发中常用的形式。
匿名内部类的格式:
new 类名|抽象类|接口(形参){
方法重写。
}
匿名内部类的特点:
1.匿名内部类是一个没有名字的内部类。
2.匿名内部类一旦写出来,就会立即创建一个匿名内部类的对象返回。
3.匿名内部类的对象的类型相当于是当前new的那个的类型的子类类型。
public class Anonymity {
public static void main(String[] args) {
Animal a = new Animal(){
@Override
public void run() {
System.out.println("猫跑的贼溜~~");
}
};
a.run();
a.go();
Animal a1 = new Animal() {
@Override
public void run() {
System.out.println("狗跑的贼快~~~");
}
};
a1.run();
a.go();
}
}
abstract class Animal{
public abstract void run();
public void go(){
System.out.println("开始go~~~");
}
}
包和权限修饰符
包:
分门别类的管理各种不同的技术。
企业的代码必须用包区分。便于管理技术,扩展技术,阅读技术。
定义包的格式:package 包名; 必须放在类名的最上面。一般工具已经帮我们做好了。
包名的命名规范:
一般是公司域名的倒写+技术名称:
http://www.itheima.com => com.itheima.技术名称
包名建议全部用英文,多个单词用”.“连接,必须是合法标识符,不能用关键字
注意:
相同包下的类可以直接访问。
不同包下的类必须导包,才可以使用!
导包格式:import 包名.类名;
权限修饰符
private | 缺省 | protected | public | |
本类中 | ✓ | ✓ | ✓ | ✓ |
本包下其他类中 | × | ✓ | ✓ | ✓ |
其他包下的类中 | × | × | × | ✓ |
其他包下的子类中 | × | × | ✓ | ✓ |