定义在一个类的内部或者是类中方法里-----------内部类,包含内部类的类-------外部类
分类为:成员内部类、静态内部类、方法内部类、匿名内部类。
成员内部类,也称普通内部类(最常见的)
eg:
//外部类
public class Person{
public int age;//外部类要调用内部类信息 需要实例化(eg:new Heart.temp =12),无法直接访问
public Heart getHeart(){
return new Heart();
}
public viod eat(){
System.out.println("人会吃东西!");
}
//成员内部类
//内部类编译后.class文件命名:外部类$内部类.class
//内部类在外部类使用时,无法直接实例化操作的,需要外部类信息才能完成实例化
class Heart{ // 这里可以使用任何访问修饰符或默认不写的都可以但是访问权限的不同,内部类的调用会有不同的影响
int temp = 12;
int age = 13; /如果这里也定义一个相同的属性 运行结果会以此值为准
public String beat(){
eat();//可以直接去调同类型的外部属性方法
return age"岁的心脏再跳动";//内部类可以直接使用外部类的成员信息
//如果只想访问与内部类的同名的外部类的信息 这样写:Person.this.age.
}
}
}
调用内部类的 在同包下 测试类
public class People{
public static void main(String args[ ]){
Person lili = new Person();
lili.age = 12 ;
//获取内部对象实例 方式1:new 外部类 . new 内部类
//因为是新产生的Person类 并且没有对其的age属性赋值(默认值0)
// 所以 运行结果会是0岁的心脏再跳动
Person.Heart myheart = new Person.new Heart();
System.out.println(myHeart.beat());
//获取内部对象实例 方式2:外部类对象 . new 内部类
myheart = lili.new Heart();
System.out.println(myHeart.beat())
//获取内部对象实例 方式3:外部类对象.获取方法
myHeart = lili.getHeart();
System.out.println(myHeart.beat());
}
}
方法内部类
public class Person {
public static int age;
// 方法内部类
/*
* 1、定义在方法内部,作用范围也在方法内
* 2、和方法内部成员使用规则一样,class前面不可以添加public、private、protected、static
* 3、类中不能包含静态成员
* 4、类中可以包含final、abstract修饰的成员
*/
public Object getHeart() {
class Heart {
public final int age = 13;
int temp = 22;
public final void say() {
System.out.println("hello");
}
public void eat() {
}
public String beat() {
new Person().eat();
return Person.age + "岁的心脏在跳动";
}
}
return new Heart().beat();//返回的都是内部类的方法
// new Heart().temp=12;
//// temp=33;
// return new Heart();
}
public void eat() {
System.out.println("人会吃东西");
}
匿名内部类
将类的定义与类的创建放在一起完成,以这种方式定义的没有名字的类的 就是匿名内部类
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦