Java 成员内部类、局部变量内部类、匿名内部类、访问修饰符
目录
一、成员内部类
public class Person {
boolean state = true;//生命状态
public class Heart{
public void jump(){
System.out.println("我的心在扑通扑通的跳");
}
}
}
* 创建内部类的对象格式:
* 外部类名.内部类命 变量名 = new 外部类名().new 内部类名
* 调用内部类成员格式:
* 内部类对象名.成员名
public class Test {
public static void main(String[] args) {
//调用成员内部类
/*
* 创建内部类的对象格式:
* 外部类名.内部类命 变量名 = new 外部类名().new 内部类名
* 调用内部类成员格式:
* 内部类对象名.成员名
*/
Person.Heart h = new Person().new Heart();
//调用内部类的jump 方法
h.jump();
}
}
二、局部变量内部类
package demo5;
public class Outer {
int a = 1;
public void show(){
int a =2;
//局部内部类
class Inner{
int a = 3;
public void showA(){
//打印outer a = 1
System.out.println(Outer.this.a);
//打印Inner a = 3;
System.out.println(this.a);
}
}
Inner in = new Inner();
in.showA();
}
}
如何调用局部内部类中的方法?
在局部方法中创建对象调用
package demo5;
public class Test {
public static void main(String[] args) {
/*
* 如何调用局部内部类中的方法?
* 在局部方法中创建对象调用
*/
Outer out = new Outer();
out.show();
}
}
运行结果
三、匿名内部类
作用:匿名内部类是创建某个类型子类对象的快捷方式。
匿名内部类:简化问题,将定义实现类,重写方法,建立实现对象合为一步完成。
(1)接口中的匿名内部类
package demo4;
public interface Smoking {
public abstract void smoking();
public abstract void brandSmoking();
}
package demo4;
public class Test {
public static void main(String[] args) {
Smoking sm = new Smoking() {
public void smoking() {
System.out.println("人在抽烟");
}
public void brandSmoking() {
System.out.println("我抽的是芙蓉王");
}
};
sm.brandSmoking();
sm.smoking();
}
}
(2)抽象中的匿名内部类
package demo3;
public abstract class Animal {
public abstract void sleep();
public abstract void eat();
}
package demo3;
public class Test {
public static void main(String[] args) {
Animal an= new Animal() {
public void sleep() {
System.out.println("在睡觉");
}
public void eat() {
System.out.println("在吃饭");
}
};
an.sleep();
an.eat();
}
}
四、访问修饰符
特别注意protected 在子类调用的时候,只能在子类的内部进行调用,不可以在子类的外部使用子类对象进行调用。
default 关注的是在不在同一包类,同一包内的都可以使用。