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

java基础语法-内部类与匿名内部类的更多相关文章

  1. JAVA基础语法——标识符、修饰符、关键字(个人整理总结)

    JAVA基础语法——标识符.修饰符.关键字 一 . 标识符 1.1    什么是标识符 就是程序员在定义java程序时,自定义的一些名字,例如helloworld 程序里关键字class 后跟的Dem ...

  2. Java基础语法(11)-面向对象之关键字

    title: Java基础语法(11)-面向对象之关键字 blog: CSDN data: Java学习路线及视频 1.this this是什么 它在方法内部使用,即这个方法所属对象的引用: clas ...

  3. JAVA基础语法:函数(方法)、类和对象(转载)

    4.JAVA基础语法:函数(方法).类和对象 函数 在java中函数也称为方法,是一段具备某种功能的可重用代码块. 一个函数包括这几部分: 函数头 函数头包括函数访问修饰符,函数返回值类型, 函数名, ...

  4. java面向对象编程——第二章 java基础语法

    第二章 java基础语法 1. java关键字 abstract boolean break byte case catch char class const continue default do ...

  5. Java基础语法(下篇)

     Java基础语法(下篇) 内容概要:        (1)函数的定义        (2)函数的特点        (3)函数的应用        (4)函数的重载               ...

  6. Java基础语法(上篇)

                     Java基础语法(上篇) 知识概要: (1)关键字的表示与规范       (2)标示符              (3)注释                (4 ...

  7. java——基础语法

    java基础语法 1.关键字:java赋予特殊含义的单词. 2.标识符:程序中开发人员自定义的名词,例如:类名,函数名,变量名(注意事项:①不能以阿拉伯数字开头②不能采用关键字). 3.常量:固定的数 ...

  8. java基础语法(二)--单列模式

    java基础语法(二)--单列模式 /** * 功能:单列模式 * @author Administrator * */ public class SingletonTest { public sta ...

  9. java基础语法(一)

    java基础语法(一) 1.类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念.先有类,然后由类来生成 对象(Object).对象又叫做实例(Instance). 2.类由两大部分构成:属性 ...

随机推荐

  1. BZOJ 5118

    矩阵乘也是可以欧拉定理的HHH 所以幂次就是$(2^n-1) ~ mod ~ \varphi(p)$就好了 const ll p=1125899839733759ll; inline ll mu(ll ...

  2. svn提交按钮灰选

    1.当我新建了一个文件或者文件夹,要提交的时候出现ok按钮灰选,提交不了. 解决方法:提交信息多写一些字儿就可以了,挥着回车换行也行 2.报错:you need to upgrade the work ...

  3. 转 Using Async for File Access

    原文:https://msdn.microsoft.com/en-us/library/jj155757.aspx using System; using System.Collections.Gen ...

  4. Nmap 进阶使用 [ 脚本篇 ]

    0×01 前言 因为今天的重点并非nmap本身的使用,主要还是想借这次机会给大家介绍一些在实战中相对比较实用的nmap脚本,所以关于nmap自身的一些基础选项就不多说了,详情可参考博客端口渗透相关文章 ...

  5. 前台js根据当前时间生成订单号

    *********前台显示框**************** <input type="text" id="WIDout_trade_no" name=& ...

  6. 杂_小技巧_将网页上的内容通过亚马逊邮箱传到kindle中

    所需条件 1.kindle要联网 2.要有亚马逊邮箱 3.要有微信,电脑上或者手机上 操作步骤: 1.找到你想要传送到kindle上的文章网页 2.在微信中关注“亚马逊kindle服务号”并且按照里边 ...

  7. 2.2String工具类

    1:split方法 public class SplitDemo1 { public static String[] name = new String[20]; public SplitDemo1( ...

  8. 工作流JBPM

    jbpm3 共分为12种节点 1.node节点:如果该节点没有定义ACTION,则流转到该节点时不会停留,会继续往下走,如果定义ACTION,执行完ACTION后会停在该节点上,调用 token.si ...

  9. SVN百度云服务器安装使用。

    安装SVN客户端 此时,必须重启,否则经常出现用不了. 重启后,还是用不了的话,那么就重新安装系统. 网站地址: http://xiaomosheng.bceapp.com/ SVN代码服务器的地址: ...

  10. LG1081 开车旅行

    题意 城市\(i\)的海拔高度为\(H_i\)(各不相同).定义距离为海拔差的绝对值 小\(A\)和小\(B\)轮流开车.从\(S\)起,一直向东行驶. 小\(A\)会选择第二近的城市作为目的地.小\ ...