day10-包的定义和内部类
1:形式参数和返回值的问题(理解)
(1)形式参数:
类名:需要该类的对象
抽象类名:需要该类的子类对象
接口名:需要该接口的实现类对象
(2)返回值类型:
类名:返回的是该类的对象
抽象类名:返回的是该类的子类对象
接口名:返回的是该接口的实现类的对象
(3)链式编程
对象.方法1().方法2().......方法n();
这种用法:其实在方法1()调用完毕后,应该一个对象;
方法2()调用完毕后,应该返回一个对象。
方法n()调用完毕后,可能是对象,也可以不是对象。
2:包(理解)
(1)其实就是文件夹
(2)作用:
A:区分同名的类
B:对类进行分类管理
a:按照功能分
b:按照模块分
(3)包的定义(掌握)
package 包名;
多级包用.分开。
(4)注意事项:(掌握)
A:package语句必须在文件中的第一条有效语句
B:在一个java文件中,只能有一个package
C:如果没有package,默认就是无包名
(5)带包的编译和运行
A:手动式
B:自动式(掌握)
javac -d . HelloWorld.java
3:导包(掌握)
(1)我们多次使用一个带包的类,非常的麻烦,这个时候,Java就提供了一个关键字import。
(2)格式:
import 包名...类名;
另一种:
import 包名...*;(不建议)
(3)package,import,class的顺序
package > import > class
4:权限修饰符(掌握)
(1)权限修饰符
本类 同一个包下 不同包下的子类 不同包下的无关类
private Y
默认 Y Y
protected Y Y Y
public Y Y Y Y
(2)这四种权限修饰符在任意时刻只能出现一种。
public class Demo {}
5:常见的修饰符(理解)
(1)分类:
权限修饰符:private,默认,protected,public
状态修饰符:static,final
抽象修饰符:abstract
(2)常见的类及其组成的修饰
类:
默认,public,final,abstract
常用的:public
成员变量:
private,默认,protected,public,static,final
常用的:private
构造方法:
private,默认,protected,public
常用的:public
成员方法:
private,默认,protected,public,static,final,abstract
常用的:public
(3)另外比较常见的:
public static final int X = 10;
public static void show() {}
public final void show() {}
public abstract void show();
6:内部类(理解)
(1)把类定义在另一个类的内部,该类就被称为内部类。
举例:把类B定义在类A中,类B就被称为内部类。
(2)内部类的访问规则
A:可以直接访问外部类的成员,包括私有
B:外部类要想访问内部类成员,必须创建对象
(3)内部类的分类
A:成员内部类
B:局部内部类
(4)成员内部类
A:private 为了数据的安全性
B:static 为了访问的方便性
成员内部类不是静态的:
外部类名.内部类名 对象名 = new 外部类名.new 内部类名();
成员内部类是静态的:
外部类名.内部类名 对象名 = new 外部类名.内部类名();
(5)成员内部类的面试题(填空)
30,20,10
class Outer {
public int num = 10;
class Inner {
public int num = 20;
public viod show() {
int num = 30;
System.out.println(num);
System.out.println(this.num);
System.out.println(Outer.this.num);
}
}
}
(6)局部内部类
A:局部内部类访问局部变量必须加final修饰。
B:为什么呢?
因为局部变量使用完毕就消失,而堆内存的数据并不会立即消失。
所以,堆内存还是用该变量,而改变量已经没有了。
为了让该值还存在,就加final修饰。
通过反编译工具我们看到了,加入final后,堆内存直接存储的是值,而不是变量名。
(7)匿名内部类(掌握)
A:是局部内部类的简化形式
B:前提
存在一个类或者接口
C:格式:
new 类名或者接口名() {
重写方法;
}
D:本质:
其实是继承该类或者实现接口的子类匿名对象
(8)匿名内部类在开发中的使用
我们在开发的时候,会看到抽象类,或者接口作为参数。
而这个时候,我们知道实际需要的是一个子类对象。
如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式简化。
interface Person {
public abstract void study();
}
class PersonDemo {
public void method(Person p) {
p.study();
}
}
class PersonTest {
public static void main(String[] args) {
PersonDemo pd = new PersonDemo();
pd.method(new Person() {
public void study() {
System.out.println("好好学习,天天向上");
}
});
}
}
(9)匿名内部类的面试题(补齐代码)
interface Inter {
void show();
}
class Outer {
//补齐代码
public static Inter method() {
return new Inter() {
public void show() {
System.out.println("HelloWorld");
}
};
}
}
class OuterDemo {
public static void main(String[] args) {
Outer.method().show(); //"HelloWorld"
}
}
匿名内部类只能使用一次,调用之后会消失,适合手机端
转载于:https://www.cnblogs.com/csslcww/p/9162620.html
day10-包的定义和内部类相关推荐
- fianl属性 java_java基础-类的高级属性(包、final、内部类)
女神镇楼 类除了具有普通的特性之外,还有一些高级特性,比如包.内部类等.包在整个管理过程中起到非常积极的作用,使用包可以有效的管理繁杂的类文件,解决类重名的问题,当在类中配合包与权限修饰符使用时,可以 ...
- python导入包相当于什么_Python包及其定义和引用详解
对于一个需要实际应用的模块而言,往往会具有很多程序单元,包括变量.函数和类等,如果将整个模块的所有内容都定义在同一个 Python 源文件中,这个文件将会变得非常庞大,显然并不利于模块化开发. 什么是 ...
- (35)System Verilog引用包中定义的类(成功)
(35)System Verilog引用包中定义的类(成功) 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog引用包中定义的类(成功) ...
- (34)System Verilog引用包中定义的类(失败)
(34)System Verilog引用包中定义的类(失败) 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog引用包中定义的类(失败) ...
- oracle 包和包体禁用,Oracle包和包体以及与非包体定义函数、过程的区别
Oracle包和包体以及与非包体定义函数.过程的区别. 1.Oracle中的包和包体 Oracle中的包和包体与java中的接口和类才关系特别类似,我们就根据对比学习一下包和包体吧! 2.oracle ...
- java类和对象之包的定义
文章目录 包的基本概述 包的作用 包的定义 导包 例题一 例题二 包的基本概述 在编写 Java 程序时,随着程序架构越来越大,类的个数也越来越多,这时就会发现管理程序中维护类名称也是一件很麻烦的事, ...
- Java——包的定义及使用
目录 1.包的定义 2.包的导入 3.系统常见包 4.总结 以下讲解的内容,概念清除即可,实际上现在使用的IDE开发工具,很多操作不需要我们手动去完成了. 1.包的定义 任何操作系统中,都有一个统一的 ...
- java 包的定义与使用
包的定义与使用 在开发过程中,会定义很多类,为了避免相同类名称出现而发生覆盖的情况,把所有java程序保存在各自的目录里面,而该目录就是包.包的本质实际上就是一个文件夹. 一.包的定义 java程序是 ...
- java中的包如何定义_java中包的定义与使用
包的本质就属于一个文件夹,用来解决类名称重名的问题. 包的定义:在源文件首行使用package包名称: package www.myfile.java; public class Test{ publ ...
最新文章
- 日服巫术online过驱动保护分析(纯工具)(工具+自写驱动)
- 饥荒海难创建显示专用服务器,饥荒创建世界时一直显示启动服务器 | 手游网游页游攻略大全...
- uva 10515——Powers Et Al.
- poj 2723 2-SAT问题
- 美国OCC代理署长Brian Brooks将于今日离任,由首席运营官接任
- Flipping elements with WPF
- 自助出版风靡美国的7个理由(转载)
- zzulioj题库题解(持续更新中.......)
- 【seeprettyface.com】开源源码:Video-Auto-Wipe
- 谷歌中国工程研究院原副院长王劲加盟百度
- 好用的三维绘图软件CREO学习标注尺寸
- ORB-SLAM3安装遇到的问题及解决
- 电子计算机进行会计核算 其会计,1. 使用电子计算机进行会计核算,其软件与其生成会计 ….doc...
- 用魔法打败魔法!这件毛衣让摄像头看不到你;两款酷炫的AI写作软件;基于深度学习扩散模型的蛋白质设计;Codon开源Python编译器;基于AI生成连贯的剧本 | ShowMeAI资讯日报
- 输出的字符串中有空格并且无法替换B e a r e r N D c y Z T g 4 N z A t N 2 N h Z C 0 0 Y 2 E 4 L T g x M W E t O D Y
- vue2中使用axios,以及axios拦截器的配置
- layui 数据表格的搜索分页功能的实现
- _parameter;@param,refid是什么意思?
- 渗透测试——bluecms安装及seay代码审计
- 综合实践空调温度控制c语言,空调温度控制系统毕业论文.doc
热门文章
- 使用Maven把项目打包成可执行jar在Idea里
- libevent在windows平台下通过vs进行编译
- 修改一个CGRect的值
- silverlight 加载大图片进度提示
- android 栈溢出 检查,安卓源码编译完成后打包时出现栈溢出,求大家解决
- ef设置非自增长id_今日学习必备:分布式系统全局唯一ID你懂吗?
- (56)UART外设驱动协议(一)(第12天)
- Vivado时序报告名词解释
- python dlib人脸检测_使用Python+OpenCV+Dlib实现人脸检测与人脸特征关键点识别
- C++ 深拷贝和浅拷贝std::move移动构造函数,移动赋值函数