1.成员内部类
1)通过在外部类中创建内部类对象,调用内部类成员
class InterClass {
int sum;
void function(){
Person p=new Person();//在外部类中创建内部类对象,调用内部类成员
p.show();
}
class Person{//成员内部类
int age=10;
String name="兰兰";
void show(){
System.out.println("age"+age+" name"+name);
}
}
}
public class InTest {//成员内部类的测试类
public static void main(String[] args) {
InterClass i=new InterClass();
i.function();
}
}
2)直接通过外部类去访问内部类成员
格式:外部类名.内部类名 对象=new 类名().new 内部类名();
class InterClass {
int sum;
void function(){
/*Person p=new Person();
p.show(); */
}
class Person{//方法内部类
int age=10;
String name="兰兰";
void show(){
System.out.println("sum"+sum+" age"+age+" name"+name);
}
}
}
public class InTest {
public static void main(String[] args) {
InterClass.Person i=new InterClass().new Person();
i.show();
}
}
2.方法内部类
class InterClass {
int sum;
void function(){
class Person{//方法内部类
int age=10;
String name="兰兰";
void show(){
System.out.println("sum"+sum+" age"+age+" name"+name);
}
}
Person p=new Person();
p.show();
}
}
public class InTest {
public static void main(String[] args) {
InterClass i=new InterClass();
i.function();
}
}
3.static内部类
class InterClass {
static int sum;//sum必须被static修饰,不然show方法取不到值;
//扩充:在静态方法中只能访问static修饰的成员变量
// 若要访问没有被static修饰的成员,必须先创建对象才能被访问
void function(){
/*Person p=new Person();
p.show(); */
}
static class Person{//方法内部类
int age=10;
String name="兰兰";
void show(){
System.out.println("sum"+sum+" age"+age+" name"+name);
}
}
}
public class InTest {
public static void main(String[] args) {
InterClass.Person i=new InterClass.Person();//被static修饰的类无需创建对象即可被调用
i.show();
}
}
4.匿名内部类
(1)第一种方法:只能调用一次成员
package it.test.come;
/*匿名内部类
* 匿名内部类是方法内部类,需先创建对象,再赋值给内部类变量
格式:new 类/接口名(){ }
原理:创建了继承这个类的子类对象(需重写父类方法)或实现这个接口的子类(实现这个接口的所有方法)
*/
interface InterClass {
public static final int sum=10;
void fun();
}
class Outer{
void outershow(){
new InterClass(){
@Override
public void fun() {
System.out.println("实现接口的抽象方法");
}
}.fun();;
}
}
public class InTest {
public static void main(String[] args) {
Outer o=new Outer();
o.outershow();
}
}
(2)第二种方法:可多次调用成员
interface InterClass {
public static final int sum=10;
void fun();
}
class Outer{
void outershow(){
InterClass i=new InterClass(){
@Override
public void fun() {
System.out.println("实现接口的抽象方法");
}
};
i.fun();//可以多次调用
i.fun();
}
}
public class InTest {
public static void main(String[] args) {
Outer o=new Outer();
o.outershow();
}
}
4.匿名内部类的应用场景
参数传递(1)
interface InterClass {
public static final int sum=10;
void fun();
}
public class Inter implements InterClass {
@Override
public void fun() {
System.out.println("实现接口的抽象方法");
}
}
public class InTest {
public static void main(String[] args) {
show(new Inter());
}
static void show(InterClass i){
i.fun();
}
}
(2)匿名内部类应用场景
interface InterClass {
public static final int sum=10;
void fun();
}
public class InTest {
public static void main(String[] args) {
show(new InterClass(){
@Override
public void fun() {
System.out.println("实现接口的抽象方法");
}
});
}
static void show(InterClass i){
i.fun();
}
}