目录
Java的内部类,就是在一个类的内部再写一个类,在一般写程序的时候每个类都是相互独立的,但是有了内部类,就打破了这种关系。
非静态内部类
其定义很简单,就是把内部类看作是外部类的一个成员变量或者方法来使用。必须依赖于外部类的对象才能调用,用法和成员变量成员方法一致的。那为什么要使用内部类?答案是可以更好的隐藏细节和结构,封装性会更好。基本的内部类还可以写在一个方法体中。
根据内部类定义的位置不同,一般可以分为以下几种形式:
1. 成员内部类(普通内部类:未被static修饰的成员内部类 和 静态内部类:被static修饰的成员内部类)2. 局部内部类(不谈修饰符)、匿名内部类
注意:内部类其实日常开发中使用并不是非常多,大家在看一些库中的代码时候可能会遇到的比较多,日常开始中使用最多的是匿名内部类
package Practice_opp;
public class MyDog {
// 成员变量
int age;
String name;
public void eatFood() {//成员方法
System.out.println("吃饼干");
System.out.println("Mydog 这是我的外部类名字");
}
public class Bird {
private String name;
int age;
public void disPlay() {
System.out.println("这是一个内部类,定义为bird");
System.out.println(name);
}
public Bird() {
name = "宝宝";
}
}
public static void main(String[] args) {
MyDog dog = new MyDog();
dog.eatFood();
dog.age = 1;
dog.name = "京京";
MyDog.Bird bird = dog.new Bird();
System.out.println(bird.name);
}
}
在方法体中定义内部类
package Practice_opp;
public class MyDog {
// 成员变量
int age;
String name;
public void dog() {
class Dog1 {
public void print() {
System.out.println("内部类输出了一个小狗");
}
}
Dog1 dog1 = new Dog1();
dog1.print();
}
public static void main(String[] args) {
MyDog dog1 = new MyDog();
dog1.dog();
}
}
静态内部类
静态内部类不依赖任何对象,类中所有的静态组件都不需要依赖任何对象,可以直接通过类本身来进行构造。
package Practice_opp;
public class MyDog {
// 成员变量
int age;
String name;
public static class Dog{
private String dogn_ame;
public Dog(String dogn_ame) {
this.dogn_ame = dogn_ame;
}
public void display(){
System.out.println("内部类");
System.out.println(dogn_ame);
}
}
public static void main(String[] args) {
MyDog.Dog dog = new Dog("小黄");
dog.display();
}
}
在这段代码中,定义了一个Dog,但这次是一个静态类的,在最后面可以看到他不依赖于其他类,但是为了表示它是一个内部类,还是把MyDog写上表示它是一个子类。
匿名内部类
这主要是和接口有关,在以后的学习中我会更新。