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.类由两大部分构成:属性 ...
随机推荐
- [BZOJ1045][HAOI2008]糖果传递 (环形均分纸牌)
题意 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. 思路 把|s[i]-s[k]|求和即可,s[i]是A的前缀和 s[k]为s数组的中位数时,总值 ...
- JavaScript(四)
条件语句 通过条件来控制程序的走向,就需要用到条件语句. 运算符 1.算术运算符: +(加). -(减). *(乘). /(除). %(求余)2.赋值运算符:=. +=. -=. *=. /=. %= ...
- luo3372线段树模板的分块做法
题目大意 请你维护一个有n个元素的整数序列,要求支持区间查询&区间修改 对于100%的数据,\(1<=n<=10^5\) 分析 正常做法是线段树维护区间修改.区间查询,今天我要讲的 ...
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第5章编程练习5
#include <iostream>using namespace std;const MAXSIZE=12;const year=3;int main(){ char *month[M ...
- React_基本原理_ajax
React 基本原理 初始化显示界面 创建虚拟DOM树 渲染到 原生 DOM 树 绘制界面显示 更新界面 setState() 更新状态机 重新创建虚拟 DOM 树 新/旧树比较差异 (执行一次 DO ...
- python3 load Iris.data数据集出现报错key words: b'Iris-setosa'
通过搜索原因,发现有可能是在对文件读取是编译出现了问题,并且Keyword中提示b'Iris-setosa',而我们的string转float函数中没有字母b,很奇怪.所以尝试将转换函数所有的stri ...
- 课堂笔记及知识点----树(2018/10/24(pm))
树 概念:由一个或多个(n≥0)结点组成的有限集合 T, 有且仅有一个结点称为根( root), 当 n>1时,其余的结点分为 m(m≥0)个互不相交的有限集合 T1,T2, …, Tm.每个集 ...
- openlayers3 基础(常见方法,类及实现)
ol3接口大全1.ol.Map类:(地图容器类) 实现: ol.Map(参数) 参数说明:1.1 target,说明地图所在的html元素. 如果没有指定,必须调用ol.Map类的setTarget( ...
- 宝塔linux面版安装网站环境 自动化
[root@localhost ~]# yum install -y wget && wget -O install.sh http://download.bt.cn/install/ ...
- 区块链侧链应用开发平台Asch节点安装及区块生产教程
1 系统要求 必须是linux系统 必须有公网ip 建议使用ubuntu 14.04 64位 建议内存1G以上 建议带宽2Mb以上 2 安装 2.1 下载 wget https://www.asch. ...