JAVA内部类的应用

1、封装

我们很显然需要对这个类的使用访问者的访问权限做出一定的限制,我们需要将一些我们不愿意让别人看到的操作隐藏起来

public interface Demo {
      void show();
  }
  
class Outer {
      private class test implements Demo {
          public void show() {
              System.out.println("密码备份文件");
          }
      }
      
      public Demo getInner() {
          return new test();
      }   
}

//test
public static void main(String[] args) {
     Outer outer = new Outer();
     Demo d = outer.getInner();
     i.show();
}
  //运行结果
  密码备份文件

1、实现多继承

public class Demo1 {
      public String name() {
          return "BWH_Steven";
      }
  }
  
public class Demo2 {
      public String email() {
          return "xxx.@163.com";
      }
  }
  
public class MyDemo {
  
      private class test1 extends Demo1 {
          public String name() {
              return super.name();
          }
      }
  
      private class test2 extends Demo2  {
          public String email() {
              return super.email();
          }
      }
  
      public String name() {
          return new test1().name();
      }
  
      public String email() {
          return new test2().email();
      }
  
      public static void main(String args[]) {
          MyDemo md = new MyDemo();
          System.out.println("我的姓名:" + md.name());
          System.out.println("我的邮箱:" + md.email());
      }
}

3、用匿名内部类实现回调的功能

我们用通俗讲解就是说在Java中,通常就是编写一个接口,然后你来实现这个接口,然后把这个接口的一个对象作以参数的形式传到另一个程序方法中, 然后通过接口调用你的方法,匿名内部类就可以很好的展现了这一种回调功能

public interface Demo {
      void demoMethod();
}
  
public class MyDemo{
      public test(Demo demo){
          System.out.println("test method");
      }
      
      public static void main(String[] args) {
          MyDemo md = new MyDemo();
          //这里我们使用匿名内部类的方式将接口对象作为参数传递到test方法中去了
          md.test(new Demo){
              public void demoMethod(){
                  System.out.println("具体实现接口")
              }
          }
      }
}

4、解决继承及实现接口出现同名方法的问题

编写一个接口Demo

public interface Demo {
      void test();
}

编写一个类MyDemo

public class MyDemo {
      public void test() {
          System.out.println("父类的test方法");
      }
      
}

编写一个测试类

public class DemoTest extends MyDemo implements Demo {
      public void test() {
      }
}

这样的话我就有点懵了,这样如何区分这个方法是接口的还是继承的,所以我们使用内部类解决这个问题。

public class DemoTest extends MyDemo {
      private class inner implements Demo {
          public void test() {
              System.out.println("接口的test方法");
          }
      }
      
      public Demo getIn() {
          return new inner();
      }
      
      public static void main(String[] args) {
          //调用接口而来的test()方法
          DemoTest dt = new DemoTest();
          Demo d = dt.getIn();
          d.test();
          
          //调用继承而来的test()方法
          dt.test();
      }
}
  
  //运行结果
  接口的test方法
  父类的test方法结尾:

参考文章:《java内部类有什么用》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值