day04(权限修饰符,内部类,局部内部类,匿名内部类)
权限修饰符,
Public >protected >default > private
public 公共权限 随便都可以访问
protected 子类可以访问权限 (子类跨包访问父类)
package day04.demo01;
public class Demo02 {
public void public01(){}
protected static void protected01(){
System.out.println("protected");
}
static void default01(){
System.out.println("default");
}
private static void private01(){
System.out.println("private");
}
}
方法定义在demo01下 在demo02下进行调用
default 默认权限 同一包下 出了包 就访问不到default01方法
private 出了当前类 其他类都不能访问
内部类,
1.在类的内部,创建类,这个类称为内部类 这个类跟普通类没有区别
2.内部类和类只是内部和外部的关系,不是子父类的关系 ,但可以使用this关键字
class Outer{
int num=10;
public void method(){
System.out.println("Out Method");
}
class Inner{//內部类
int num=20;
public void method(){
System.out.println("Inner Method");
System.out.println(num);//20 就近原则
System.out.println(this.num);//使用this调用当前类下成员变量
System.out.println(Outer.this.num);//使this指向Outer类中的成员变量
Outer.this.method();//调用Outer下的method方法
}
}
}
说明 在Inner的对象中有一个值指向了Outer对象
输出结果
Inner Method
20
20
10
Out Method
局部内部类,
位置:方法中
class Outer{
int num=10;
public void method(){
class Inner{//內部类 创建在在方法中 称为 局部内部类
int num=20;
public void method(){
System.out.println("Inner Method");
System.out.println(num);//20
System.out.println(this.num);//使用this调用Outer类下成员变量 20
System.out.println(Outer.this.num);//10
}
}
Inner i=new Inner();//必须在Inner类后调用 否则无法识别
i.method();
System.out.println(i.num);//20
} }
输出结果:
Inner Method
20
20
10
20
匿名内部类,
一般的实现接口类
interface Inter01 {
public abstract void eat();
} public class Animal implements Inter01 {
public void eat() {
System.out.println("eat");
} public static void main(String[] args) {
Animal a = new Animal();
a.eat();
}
}
使用匿名内部类:创建一个类(抽象类,接口) 并创建该类的对象 实现方法
优点:如果一个实现接口类只调用一次,使用内部来调取,会节约内存
注意事项:
在方法中匿名内部类外 定义一个变量 如果匿名内部类使用了该变量 则改变量需要使用final 修饰
原因:因为这个匿名内部类对象执行完以后还会存在 在匿名内部类中会调用到该变量
如果该变量在执行方法完后,会消失,所以该变量必须被final修饰成为常量存储在方法区的常量池中。
class Test {
public void method() {
final int num=10;
new Inter01() {
@Override
public void eat() {
System.out.println(num);
}
};
}
}
day04(权限修饰符,内部类,局部内部类,匿名内部类)的更多相关文章
- 06 面向对象:多态&抽象类&接口&权限修饰符&内部类
多态: /* 多态(polymorphic)概述 * 事物存在的多种形态 多态前提 * a:要有继承关系. * b:要有方法重写. * c:要有父类引用指向子类对象. * 成员变量 * 编译看左边(父 ...
- static介绍、内部类、final、权限修饰符的作用范围
static 关键字:(可用于修饰方法.变量) static 特点: static是静态修饰符,一般修饰成员变量.被static修饰的属于全局共享.被static修饰的成员属于 ...
- 包和访问权限修饰符,.单例设计模式,.Object类常用方法,.内部类
1.包和访问权限修饰符 1.1 包 为什么要导包? 将字节码文件(.class)文件进行分类存放 --->包 其实就是文件夹 import java.util.Arrays; 包的划分规则 方案 ...
- java自学第3期——继承、多态、接口、抽象类、final关键字、权限修饰符、内部类
一.继承: 关键字extends /* 定义一个父类:人类 定义父类格式:public class 父类名称{ } 定义子类格式:public class 子类名称 extends 父类名称{ } * ...
- 零基础学习java------day10------带包编译,权限修饰符,内部类,调式,junitTest
0. 带包编译 解决使用notepad++编写的java类中如果有package的解决方案,如下代码 package com._51doit.test; class HelloWorld{ publ ...
- Java基础学习笔记(四) - 认识final关键字、权限修饰符和内部类
一.final关键字 为什么要使用 final 关键字? 通过继承我们知道,子类可以重写父类的成员变量和方法.final 关键字可以用于修饰父类,父类成员变量和方法,使其内容不可以被更改. 1.被修饰 ...
- 匿名类、包、权限修饰符_DAY10
1:内部类(理解) (1)把类定义在一个类的内部. (2)特点: A:内部类可以直接使用外部类的成员,包括私有. B:外部类要使用内部类成员,必须创建对象使用. 例子: public c ...
- 面向对象 继承 抽象类 接口 static 权限修饰符
Day01 面向对象 继承 抽象类 接口 static 1.匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 2.类的继承是指在一个现有类的基础上去构建一个新的类,构建出 ...
- Java中的四种权限修饰符
权限修饰符 public protected [default] private 同一个类 YES YES YES YES 同一个包 YES YES YES NO 不同包子类 YES YES NO ...
随机推荐
- 【343】MathJax、LaTex、Mathml 数学公式
参考:cnblog中添加数学公式支持 分类参考: 1. 基本功能 MathJax 我的LaTeX入门 MathJax basic tutorial and quick reference 分段函数:矩 ...
- java 可伸缩阻塞队列实现
最近一年多写的最虐心的代码.必须好好复习java并发了.搞了一晚上终于测试都跑通过了,特此纪念,以资鼓励! import java.util.ArrayList; import java.util.L ...
- PCA和SVD(转)
最近突然看到一个问题,PCA和SVD有什么关系?隐约记得自己照猫画虎实现的时候PCA的时候明明用到了SVD啊,但SVD(奇异值分解)和PCA的(特征值分解)貌似差得相当远,由此钻下去搜集了一些资料,把 ...
- Js获取iframe子页面全局变量
项目中通过iframe内嵌了一个子页面,子页面定义了一些全局变量,父页面需要获取子页面的全局变量,做了一些测试(我的环境IE10和Firefox32.0.3),得出如下结论: IE下: window. ...
- Bean Validation技术实现对Javabean的校验
概述:在java开发时,由于分层的原因(表现层-控制层-业务层-数据持久层),有时候需要对传入的Javabean进行校验,如果过多的校验会导致比较繁琐,做重复的工作,下面将介绍Bean Validat ...
- java写简单Excel 首行是目录 然后前台下载
页面: <form action="${path}/xxx/xxx.do" method="get" > 表格下载:<input type=& ...
- Winsock版本的“hello world!”
1.基于TCP协议的“hello world!” 1)服务器端:WSAStartup()->socket()->bind()->listen()->accept()->s ...
- Dice
Dice http://acm.hdu.edu.cn/showproblem.php?pid=5012 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- Linux找不到动态库
首先系统上得有,只是路径问题 可使用ldd查看可执行程序的依赖库 以下都需要超级权限: find / -name libnet.so.9 // 可能在/usr/lib或/usr/local/lib中 ...
- visio2003 数据表模型中显示字段类型和注释
1.在visio菜单上选择 数据库->选项->文档. 2.在常规中找到 [在图表中可见的名称] 选中 两者. 3.在表中找到 [数据类型] 选中 显示物理. 4.在数据表模型中创建字段,并 ...