内部类:
顾名思义就是在一个类里面重新再写一个类
内部类有:成员内部类、局部内部类、匿名内部类
成员内部类:
外部类创建内部类实例的时候与其他类创建对象引用时相同。内部类可以访问他的外部类成员,内部类的成员只能在内部类范围内是可见的
局部内部类:
顾名思义就是在一个类里面重新再写一个类
内部类有:成员内部类、局部内部类、匿名内部类
成员内部类:
外部类创建内部类实例的时候与其他类创建对象引用时相同。内部类可以访问他的外部类成员,内部类的成员只能在内部类范围内是可见的
举个栗子:
public class Animal {
private int age;
private String name;
private int x;
Sheep sheep = new Sheep(); //内部类在类中实例化方法
public void eat(){
//sheep.eat();
sheep.kind = "iii";
age = 10;
name= "zhuazhua";
System.out.println("Animal:"+"age="+age+"name="+name);
System.out.println(sheep.kind);
}
class Sheep{ // 成员内部类
String kind="o";
int x =0;
public void eat(){
age = 11;
name = "angle";
System.out.println("Sheep:"+"age="+age+"name="+name);
}
public void sleep(){
kind = "ooo";
}
public Sheep shout(){
x = 3;
sheep.x = 4;
kind = "oo";
return sheep;
}
public void add(int x){
x++; //形参x
this.x++; // 内部类变量
Animal.this.x++; // 外部类变量
}
}
public static void main(String[] args) {
Animal animal = new Animal();
animal.eat();
// Sheep sh = new Sheep(); 在main方法中不能这样实例化内部类
Animal.Sheep sh = animal.new Sheep(); //
sh.eat();
}
}
局部内部类:
类方法中的定义的内部类,他的作用范围就是该方法体
在方法外部不能访问该内部类
同样还是上栗子:
public class Sell {
private String name;
public Sell(){
name = "apple";
}
public void sell(int price){
class Apple{
int price =0;
public Apple(int price) {
this.price = price;
}
public void Price(){
System.out.println("sell:"+name);
System.out.println("price="+price);
}
}
Apple apple = new Apple(price);
apple.Price();
}
public static void main(String[] args) {
Sell se = new Sell();
se.sell(12);
}
}
匿名内部类:
内部类不一定要给它一个名字,可以直接由对象名来代替,所以就有了匿名内部类,匿名内部类的所有代码需要在大括号里实现;
直接new就可以了
学习内部类的一些心得