黑马程序员_Java(形式参数,包,内部类,权限修饰符)_limingyuer的博客-程序员秘密

------- android培训java培训、期待与您交流! ----------
只要努力了才可以说不后悔
1:形式参数和返回值的问题
(1)形式参数:
类名:需要该类的对象
抽象类名:需要该类的子类对象
接口名:需要该接口的实现类对象
(2)返回值类型:
类名:返回的是该类的对象
抽象类名:返回的是该类的子类对象
接口名:返回的是该接口的实现类的对象
(3)链式编程
对象.方法1().方法2().......方法n();

这种用法:其实在方法1()调用完毕后,应该一个对象;
方法2()调用完毕后,应该返回一个对象。
方法n()调用完毕后,可能是对象,也可以不是对象。
abstract class Person {
public abstract void study();
}

class PersonDemo {
public void method(Person p) {//p; p = new Student(); Person p = new Student(); //多态
p.study();
}
}

//定义一个具体的学生类
class Student extends Person {
public void study() {
System.out.println("Good Good Study,Day Day Up");
}
}

class PersonTest {
public static void main(String[] args) {
//目前是没有办法的使用的
//因为抽象类没有对应的具体类
//那么,我们就应该先定义一个具体类
//需求:我要使用PersonDemo类中的method()方法
PersonDemo pd = new PersonDemo();
Person p = new Student();
pd.method(p);
}
}
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();
public class Father {
private void show() {
System.out.println("show");
}

void show2() {
System.out.println("show2");
}

protected void show3() {
System.out.println("show3");
}

public void show4() {
System.out.println("show4");
}

public static void main(String[] args) {
Father f = new Father();
f.show();
f.show2();
f.show3();
f.show4();
}
}
ublic class Test {
public static void main(String[] args) {
Father f = new Father();
//f.show();
f.show2();
f.show3();
f.show4();
}
}
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 Student implements Person {
public void study() {
System.out.println("好好学习,天天向上");
}
}

class InnerClassTest2 {
public static void main(String[] args) {
//测试
PersonDemo pd = new PersonDemo();
Person p = new Student();
pd.method(p);
System.out.println("--------------------");

//匿名内部类在开发中的使用
//匿名内部类的本质是继承类或者实现了接口的子类匿名对象
pd.method(new Person(){
public void study() {
System.out.println("好好学习,天天向上");
}
});
}
}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/limingyuer/article/details/45851105

智能推荐

MySQL到ClickHouse的高速公路_公众号:肉眼品世界的博客-程序员秘密

推荐阅读:世界的真实格局分析,地球人类社会底层运行原理不是你需要中台,而是一名合格的架构师(附各大厂中台建设PPT)企业IT技术架构规划方案论数字化转型——转什么,如何转?企业10大管理流...

maven打jar包,包含第三方jar_xuruilll的博客-程序员秘密_maven打包第三方jar包

最近工作外时间帮别的项目组做一个小工具,使用swing gui,在集成开发环境里面运行没问题了。打包发布给他们用,碰到了各种各样的问题,要么是找不到main函数,要么是找不到第三方jar包里的class。一般用Spring、SpringBoot这些框架做web应用,用spring-boot-maven-plugin很方便,现在这种非springboot的应用,得重新找打包的plugin。找了各种工具,总算找到一个能用的maven-shade-plugin,解决了问题。<build>

代码方式配置Log4j并实现线程级日志管理 第五部分_柠檬睡客的博客-程序员秘密

文章目录一 第三方程序不应仅限于会用二 同时按日期和文件大小备份三 调整ThreadLogger使用复写的Appender四 简单测试下五 结语一 第三方程序不应仅限于会用  关于日志文件备份的问题,我跟很多人都沟通过,但是结果很遗憾,绝大部分人对于Log4j的理解仅限于常规的使用,网路上能搜索到的资源绝大部分也只是关于配置的介绍。  其实这样的现象并不少见,略微延展起来就变成了老生常谈的一...

2020张宇1000题【好题收集】【第十章:线性代数(二)】(还有问题)_SwustLpf的博客-程序员秘密

文章目录向量组的线性相关与线性无关基础知识:齐次方程与线性无关:非齐次方程与线性无关848590【证明题】91(打星)【证明题】92(打星)向量组的线性相关与线性无关基础知识:齐次方程与线性无关:不存在不全为0的k1,k2...k_1,k_2...k1​,k2​...使得k1α1+k2α2+...+knαn=0,也就是齐次方程AX=0只有零解⇒∣A∣不等于0k_1\alpha_1+k_2...

netcore之判断系统_g0415shenw的博客-程序员秘密

netcore判断系统是哪种系统: Console.WriteLine("判断是否为Windows Linux OSX"); Console.WriteLine($"Linux:{RuntimeInformation.IsOSPlatform(OSPlatform.Linux)}"); Console.WriteLine(...

vue能控制未登陆的请求不能访问url_前后端分离, 前端如何防止直接输入URL进入页面?..._weixin_39968801的博客-程序员秘密

没有人提下JWT?Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直...

随便推点

python怎么一步步调试_PyCharm入门第一步(二)——调试第一个Python应用程序_weixin_39997664的博客-程序员秘密

第2步:调试您的第一个Python应用程序找出问题的根源PyCharm报告运行时错误:a ZeroDivisionError。深入研究一下代码,找出问题所在。这里可以使用PyCharm调试器来查看代码中发生了什么。要开始调试,您必须先设置一些断点。要创建断点,只需单击左侧gutter:接下来,单击左侧gutter中的播放图标,在main旁边,然后选择Debug 'Car'。 PyCharm启动调试...

2.逻辑回归算法梳理_weixin_30823683的博客-程序员秘密

学习内容:1、逻辑回归与线性回归的联系与区别2、 逻辑回归的原理3、逻辑回归损失函数推导及优化4、 正则化与模型评估指标5、逻辑回归的优缺点6、样本不均衡问题解决办法7. sklearn参数参考资料1、西瓜书 2、cs229吴恩达机器学习课程 3、 李航统计学习 4、谷歌搜索一、逻辑回归与线性回归的联系与区别应用场景:线性回归主要用来解决连续值...

根据模板的AM数据信息提取插件设计_TriWeb_ton的博客-程序员秘密

根据模板的AM数据信息提取插件设计by eattonton 1.说明      从AM(Aveva Marine)软件中提取数据是设计工作的重要内容之一。对于软件开发人员来说,往往会根据业务需要,编写相应的AM插件Addin程序。这些程序都会涉及数据的提取。同时,由于不同的业务对数据的内容往往会不一样,比如抽取钢板清单会关注板规、材质;抽取模型信息会关注零件厚度、材质等等。这就导致数据

mysql应用memcache,MySQLMemcache_engine的安装与使用_MySQL_伦斯特的博客-程序员秘密

memcache鉴于国内外还没有人撰写如何安装Memcache_engine的文章,于是,我根据自己的编译安装步骤,写下此文。Memcache_engine是一个MySQL 5.1数据库的存储引擎,它能够让用户通过标准的SQL语句(SELECT/UPDATE/INSERTE/DELETE)访问Memcached(还支持新浪的Memcachedb、dbcached)中存放的数据。限制:1、Memca...

wxhtmltopdf 图片路径问题_跳坑《一百零一》wx.downloadFile问题_爱古丽的博客-程序员秘密

这个问题,研究者甚少,以至于相关问题直到今天,仍然属于未知的领域,所以我准备集合所有的知识和资源,来说明这个问题;本帖将不断聚合跟downloadFile有关的知识和内容,假如你有自己的经验,也欢迎分享出来,可以单独发帖也可以回复在这里,以便方便其他同学学习和参考!官方文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-file.h...