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
java基础语法-内部类与匿名内部类的更多相关文章
- JAVA基础语法——标识符、修饰符、关键字(个人整理总结)
JAVA基础语法——标识符.修饰符.关键字 一 . 标识符 1.1 什么是标识符 就是程序员在定义java程序时,自定义的一些名字,例如helloworld 程序里关键字class 后跟的Dem ...
- Java基础语法(11)-面向对象之关键字
title: Java基础语法(11)-面向对象之关键字 blog: CSDN data: Java学习路线及视频 1.this this是什么 它在方法内部使用,即这个方法所属对象的引用: clas ...
- JAVA基础语法:函数(方法)、类和对象(转载)
4.JAVA基础语法:函数(方法).类和对象 函数 在java中函数也称为方法,是一段具备某种功能的可重用代码块. 一个函数包括这几部分: 函数头 函数头包括函数访问修饰符,函数返回值类型, 函数名, ...
- java面向对象编程——第二章 java基础语法
第二章 java基础语法 1. java关键字 abstract boolean break byte case catch char class const continue default do ...
- Java基础语法(下篇)
Java基础语法(下篇) 内容概要: (1)函数的定义 (2)函数的特点 (3)函数的应用 (4)函数的重载 ...
- Java基础语法(上篇)
Java基础语法(上篇) 知识概要: (1)关键字的表示与规范 (2)标示符 (3)注释 (4 ...
- java——基础语法
java基础语法 1.关键字:java赋予特殊含义的单词. 2.标识符:程序中开发人员自定义的名词,例如:类名,函数名,变量名(注意事项:①不能以阿拉伯数字开头②不能采用关键字). 3.常量:固定的数 ...
- java基础语法(二)--单列模式
java基础语法(二)--单列模式 /** * 功能:单列模式 * @author Administrator * */ public class SingletonTest { public sta ...
- java基础语法(一)
java基础语法(一) 1.类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念.先有类,然后由类来生成 对象(Object).对象又叫做实例(Instance). 2.类由两大部分构成:属性 ...
随机推荐
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
转自http://www.cnblogs.com/fnz0/p/5713102.html 不知道自己什么时候才有这种钻研精神- -. 1 背景 系统中需要批量生成单据数据到数据库表,所以采用 ...
- css 背景(background)属性、背景图定位
background属性: Background属性是css中应用比较多,且比较重要的一个属性,它是负责给盒子设置背景图上和背景颜色的,background是一个复合属性,它可以分解成如下几个设置项: ...
- jquery提示sucess
这是学习笔记. 今天做东西的时候,想把体验做好,于是打算再ajax success字段中添加函数实现提示sucess. 用了jquery的fadeIn 跟fadeOut,再fadeIn的callbac ...
- 输入,输出与Mad Libs游戏
name1=input('请输入一个名字') name2=input('请输入一个名字') car=input('请输入一种车子') print('饥饿的{}看到{}穿着三级甲骑着{}下山'.form ...
- 执行发送邮件Send方法时,报错:邮箱不可用。 服务器响应为: 5.7.1 Unable to relay for xxx@xxx.com
.net代码在执行发送邮件Send方法时,往往出现这个的报错: 邮箱不可用. 服务器响应为: 5.7.1 Unable to relay for xxx@xxx.com 这个问题应该是smtp的设置问 ...
- 中文乱码总结之web乱码情景
情景1.当servlet返回js脚本时弹出框显示中文乱码: 解决:在servlet中加上response.setContentType(“text/html;charset=utf-8”); 情景2. ...
- 使用C#.NET列举组合数前N项和
列举如下列所示的组合数前N项和,代码如下(递归方法里注意去重): static void Main(string[] args) { List<).ToList(); File.AppendAl ...
- synchronized和Lock复习
刚学编程的时候,不懂得同步的概念,只认为程序按照自己写的顺序执行, 直到学到多线程,但当时理解同步问题,也只是面对临界资源需要加锁去控制, 解决一些,如生产消费的问题.但当时一直没考虑过,多线程的情况 ...
- 附录A application.properties配置项
摘自官网,仅作为参考用 Part X. Appendices # =================================================================== ...
- Python003-测试辅助示例应用数据库更新语句创建
上周同事又问一个问题:表 C_Application 中数据量较大,需要批量更新 load_start_time 的时间为 '1900-01-01 18:43:49' 为初始值,以一定时间间隔且每次更 ...