java基础语法-内部类与匿名内部类

1.成员内部类(声明在类内部&&方法之外)

class Person{
    String name = "韩梅梅";
    int age;
    class Bird{
        String name = "黄鹂";
        int id;
        void setName(String name){
            System.out.println(name);//方法传入的name-杜鹃
            System.out.println(this.name);//Bird对象的name-黄鹂
            System.out.println(Person.this.name);//Person对象的name-韩梅梅

        }
        void info(){
            show();
        }

    }
    static class Dog{

    }
    void show(){
        System.out.println("我是show()方法");
    }

    public static void main(String[] args) {
        Person.Dog dog = new Person.Dog();//静态内部类的对象生成方法
        Person.Bird bird = new Person().new Bird();//非静态内部类的对象构造方法
        bird.info();
        bird.setName("杜鹃");
    }

}

2.局部内部类(声明在方法内部)

class OuterClass{
    void method(){

        class InnerClass{

        }
    }
    Comparable getComparable(){//内部类
        class MyComparable implements Comparable{
            @Override
            public int compareTo(Object o) {
                return 0;
            }
        }return new MyComparable();
    }
    Comparable getComparable1(){//匿名内部类
        return new Comparable() {
            @Override
            public int compareTo(Object o) {
                return 0;
            }
        };
    }
}

3.匿名内部类的应用实例

public class Main3 {
    public static void main(String[] args) {
        //该方式类和接口之间的关系清晰便于阅读
       Main3 main3 = new Main3();
       NoteBook noteBook = new NoteBook();
       main3.show(noteBook);
       
       //该方式隐匿了类与接口之间的关系
       main3.show(new Product() {
           @Override
           public void getName() {
               System.out.println("Iphone5s");
           }

           @Override
           public void getPrice() {
               System.out.println("5288");
           }
       });
       //该方式隐匿了类的,但接口的操作清晰
       Product product = new Product() {
           @Override
           public void getName() {
               System.out.println("Galaxy Note3");
           }

           @Override
           public void getPrice() {
               System.out.println("5288");
           }
       };
        System.out.println();
        Product product1 =main3.getProduct();
        product1.getName();
        product1.getPrice();

        Product product2 =main3.getProduct();
        product2.getName();
        product2.getPrice();

    }
    void show(Product product){
        product.getName();
        product.getPrice();
    }
    Product getProduct(){
      class Camera implements Product{

          @Override
          public void getName() {
              System.out.println("数码相机");
          }

          @Override
          public void getPrice() {
              System.out.println("400");

          }
 }return new Camera();
    }
      Product getProduct1(){
          return new Product(){

              @Override
              public void getName() {
                  System.out.println("电子书");
              }

              @Override
              public void getPrice() {
                  System.out.println("1000");
              }
          };
}
}
interface Product{
    void getName();
    void getPrice();
}
class NoteBook implements Product{

    @Override
    public void getName() {
        System.out.println("HP笔记本");
    }

    @Override
    public void getPrice() {
        System.out.println("¥5000");
    }
}

以上内容来源于谷粒学院java教程第135集。网址http://www.gulixueyuan.com/course/39/task/443/show

转载于:https://www.cnblogs.com/yanquebbuyan/p/9971468.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值