Java学习笔记15(面向对象八:匿名对象、内部类)
匿名对象:
是指创建对象的时候,只有创建对象的语句,却没有把对象地址值赋给某个变量
创建一个普通对象:
Person p = new Person();
创建一个匿名对象:
new Person();
注意:
1.匿名对象只能使用一次
2.匿名对象可以作为参数传递
3.匿名对象可以当作方法的返回值
示例:
public class Demo {
public static Person getPerson(){
//普通方式
//Person p = new Person();
//return p;
//匿名对象作为方法返回值
return new Person();
}
public static void method(Person p){}
}
public class Test {
public static void main(String[] args) {
//调用getPerson方法,得到一个Person对象
Person person = Demo.getPerson();
//调用method方法
Demo.method(person);
//匿名对象作为方法接收的参数
Demo.method(new Person());
}
}
内部类:
在类的内部定义类
什么时候需要呢?比如,一个汽车,包含发动机,发动机就可以用内部类来描述
内部类的分类:成员内部类,局部内部类
成员内部类的建立和调用示例:
public class Outer {
private int a = 1;
//内部类可以使用外部类成员,包括私有
//外部类无法直接使用内部类变量,必须建立内部类对象
class Inner{
public void inner(){
System.out.println("内部类方法"+a);
}
}
}
public class Test {
public static void main(String[] args) {
//内部类调用格式:
Outer.Inner in = new Outer().new Inner();
in.inner();
}
}
同名变量的调用问题:
public class Outer {
int i = 1;
class Inner{
int i =2;
public void inner(){
int i = 3;
System.out.println(i);//
System.out.println(this.i);//
System.out.println(Outer.this.i);//
}
}
}
局部内部类:
把一个类写在了一个方法里面
调用方法相对复杂
示例:
public class Outer {
public void out(){
class Inner{
public void inner(){
System.out.println("局部内部类方法");
}
}
Inner inner = new Inner();
inner.inner();
}
}
public class Test {
public static void main(String[] args) {
new Outer().out();
}
}
内部类的实际使用:
匿名内部类:
临时定义某一指定类型的子类,定义后立即创建刚刚定义的这个子类对象
示例:
public interface Smoking {
public abstract void smoking();
}
public class Test {
public static void main(String[] args) {
//固定格式
//实际上创建了接口的实现类,重写方法
//这里也可以这样写Smoking s = new Smoking() {};
//然后s.方法调用
new Smoking() {
public void smoking() {
System.out.println("人在吸烟");
}
}.smoking();
//注意这个分号
}
}
Java学习笔记15(面向对象八:匿名对象、内部类)的更多相关文章
- 疯狂java学习笔记之面向对象(八) - static和final
一.static: 1.static是一个标识符: - 有static修饰的成员表明该成员是属于类的; - 没有static修饰的成员表明该成员是属于实例/对象的. 2.static修饰的成员(Fie ...
- Java学习笔记之---面向对象
Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...
- Java学习笔记:01面向对象-继承
01面向对象-继承 一.java中的数据类型 1.基本数据类型:四类 八种 byte(1) boolean(1) short(2) char(2) int(4) float(4) long(8) do ...
- Java学习笔记之面向对象、static关键字
一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...
- 【原】Java学习笔记020 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 成员方法的参数列表 ...
- 【原】Java学习笔记018 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 继承关系的子类可以 ...
- 【原】Java学习笔记015 - 面向对象
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 传递 值类型参数 ...
- Java 学习笔记 ------第四章 认识对象
本章学习目标: 区分基本类型与类类型 了解对象与参考的关系 从打包器认识对象 以对象观点看待数组 认识字符串的特性 一."=" 和 "==" 当=用于基本类型时 ...
- Java 学习笔记(4)——面向对象
现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢 ...
随机推荐
- 让你变懒的 Android Studio Live Templates
俗话说.不想偷懒的程序猿不是好程序猿.那么今天就教大家偷懒下! 先举个样例.我们在 Android 开发中输入 Toast ,然后会有例如以下例如以下的高速操作: 是不是非常方便? 有同学问,这不就是 ...
- Linux网络编程--wireshark分析TCP包头的格式
摘要: 本文简介了TCP面向连接理论知识,具体讲述了TCP报文各个字段含义.并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述 TCP是面向连接的可靠传输 ...
- bmp文件格式中rgb555与rgb888之间的转换,24位与16位位图的转换
今日,有同事问我.rgb555模式下的位图文件的格式问题,于是花了一下午的时间通过推測与測试,分析出了例如以下bmp文件在rgb555模式下的文件存储规律: 1:bmp文件的文件信息头中的biBitC ...
- 前端笔记——如何控制表单控件中的disabled
0.前言 本文主要说明如何使能或禁止表单控件.表单控件具有disabled属性,通过设置该属性可以禁止所有的input控件,input的更多属性请参考资料[1].下面就通过一个简单的例子说明如 ...
- 【SqlServer系列】表达式(expression)
1 概述 本篇这文章主要概述SqlServer表达式. 2 具体内容 2.1 使用范围 SQL Server(2008开始) :Azure SQL数据库:Azure SQL数据仓库:并行数 ...
- MD5加密--Java
MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321(R.R ...
- 为什么要使用消息认证码(MAC)而非对称密钥?
问题: 看了消息认证码的介绍后,小丽心想"如果用对称密码将消息加密后再发送的话,是不是就不需要消息认证码了呢?"原因有下: 1.对称密码的密文只有使用和加密时相同的密钥才能正确解密 ...
- android 网络请求Volley的简单使用
下载到本地jar包或者在线导入,jar地址:链接:http://pan.baidu.com/s/1gf3VZAb 密码:mmye //定义变量 private RequestQueue mQueue= ...
- 分组查询限制。HAVING可写在GROUP BY前。
限制一.无GROUP BY时统计函数不能和字段同时出现: 限制二.有GROUP BY时字段部分只能出现分组的字段: 限制三.统计函数嵌套时不能有字段.
- iOS Swift--UIImageView UIImage
1.UIImageView + UIImage Demo import UIKit class UIImageViewViewController: UIViewController { var ...