JAVA- 内部类

 

内部类

JAVA- 内部类
public class InnerDemo {
    
    class Inner{
        public void innerMethod(){
            System.out.println("this is inner method");
        }
    }
    public Inner getInnerInstance(){
        return this.new Inner();
    }
    
    public static void main(String[] args) {
        //获取内部对象,这是第一种
        InnerDemo innerDemo = new InnerDemo();
        Inner inner = innerDemo.new Inner();
        
        //获取内部对象,这是第二种
        InnerDemo innerDemo1 = new InnerDemo();
        Inner inner1 = new InnerDemo().getInnerInstance();
    
    }
JAVA- 内部类

成员内部类

定义了成员内部类后必须使用外部类对象来创建内部类对象,而不能世界去new 一个内部类对象,即

内部类 对象名 = 外部类对象.new 内部类()

一般来说,编译内部类后生成的类文件是以“外部类名称$内部类名称.class” 这种形式命名的,但在Java语言中,只要存在$,就应将其替换为 “ . ” 。

public class InnerDemo{
    class Inner{
     
    }
}

成员内部类,只要外部这个类还在内存当中,这个成员内部类就会驻留在内存。

局部内部类

JAVA- 内部类
public class InnerDemo1 {
    public void call(){    //这是一个方法
        class Inner{       //这是一个方法里的局部内部类
            
        }
    }
}
JAVA- 内部类

局部内部类随着方法的弹栈而被销毁。

匿名内部类

定义匿名内部类的时候,必须要有接口或抽象类。这个匿名内部类还得写成一个局部的匿名内部类。

这个是非匿名内部类实现一个接口的代码:

JAVA- 内部类
interface Inner{
    void call();
}
public class InnerDemo1 {
    public void say(){
        class InnerImpl implements Inner{
            @Override
            public void call() {
            }
        }
    }
   
}
JAVA- 内部类

 

静态内部类

JAVA- 内部类
public class InnerDemo {
   static String name; //InnerDemo.name
   static class Inner{ //获取到该静态内部类构造器InnerDemo.Inner(),构造器获取实例对象new InnerDemo.Inner();
        public void function(){
            System.out.println("this is inner method");
        }
   }
}
JAVA- 内部类

 

JAVA- 内部类
  class Outer{ //定义外部类

String info=”Welcome,everybody”; //定义外部类的私有属性

class Inner{ //定义内部类
public void print(){ //定义内部类的方法
System.out.println(info); //直接访问外部类的方法
}
}
public void fun(){ //定义外部类的方法
new Inner().print(); //通过内部类的匿名对象调用内部类的print()方法
}
}
public class OuterInner {

public static void main(String[] args) {
// TODO Auto-generated method stub
Outer out = new Outer();
Outer.Inner in = out.new Inner();
in.print();

}

}

给TA打赏
共{{data.count}}人
人已打赏
博客

Ubuntu 17.4下如何安装VMwareTools

2019-8-17 17:18:51

Java博客

JAVA- 成员变量与局部变量的区别

2019-8-17 17:22:12

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索