Java基础学习-类

举报
AAAI 发表于 2021/03/31 01:54:22 2021/03/31
【摘要】 内部类 一个类内部包含另一个类。编译文件格式:xx$内部类名称.class 成员内部类 修饰符 class 类名称 { 修饰符 class 内部类名称{ } } 12345 内用外,随意访问,外用内,需要内部类对象。 使用成员内部类 间接:通过外部类的读写,调用外部类的方法,里面间接使用内部类方法。 直接:类名称 对象名 = new 类名称();...

内部类

一个类内部包含另一个类。编译文件格式:xx$内部类名称.class

成员内部类

修饰符  class  类名称 { 修饰符  class  内部类名称{ }

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

内用外,随意访问,外用内,需要内部类对象。

使用成员内部类

间接:通过外部类的读写,调用外部类的方法,里面间接使用内部类方法。

直接:类名称 对象名 = new 类名称();

外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();

内部类调用重名的外部类成员变量,外部类名称.this.外部类成员变量名。

局部内部类(包含匿名内部类)

只有当前所属方法才使用它。

修饰符  class  类名称 { 修饰符 返回值类型  外部类方法名称(参数列表) { class  内部类名称 {   } }

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

类的权限修饰符

public > protected > (default) > private

  • 外部类:public / (default)
  • 成员内部类:public / (default) / protected / private
  • 局部内部类:什么都不能写

private 是本类内部使用,protected 没有外边的

final

局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是有效的(final)

只要局部办理事实不变,final关键字可以使用。

new出来的对象在堆内存中。局部变量是更着方法走的,在栈内存当中。方法结束会立即消失,但对象还在,解决生命周期问题。

匿名内部类

接口的实现类(或者父类的子类)只需要唯一的一次,可以省略掉该类定义。

接口名称 对象名 = new 接口名称( ){

​ @Override

覆写重写接口中的所有抽象方法

};

格式:(new 接口名称(){ 匿名内部类内容 })进行解析:

1.匿名内部类,在创建的时候使用唯一一次。

2.匿名内部类+匿名对象:

new  接口名称( ){
		@Override
		**覆写重写**接口中的所有抽象方法
}. 方法名;

  
 
  • 1
  • 2
  • 3
  • 4

注意:

XX.A().B(); 两个.是用A返回值作为对象来调用B方法。

3.匿名内部类省略了实现类/子类名称,但是匿名对象是省略了对象名称。

成员变量

使用类作为成员变量:

调用时使用 类名称.方法名称 进行获取传递的变量信息

使用接口作为成员变量:

因为参数时接口类型,但是接口的方法不能直接使用,因此:

使用实现类/匿名内部类 对接口方法进行实现调用。

Skill为接口,Hero类的接口成员变量为private Skill skill;

Hero类里面使用内部类方法为skill.use

但是,接口不能直接使用,因此将skill对象重写定义为一个接口实现类SkillImpl

Hero hero = new Hero;

hero.setSkill( new SkillImpl( ) );

或者为

Skill skill = new Skill { @Override 接口方法 };

hero.setSkill(skill);

或者:匿名对象+匿名内部类

hero.setSkill ( new Skill ( ) { @Override 接口方法 } );

接口作为方法的参数和返回值

可以返回接口,接口虽然不能被实例化,但是接口的实现类都可以向上转型为接口。

public static 接口类型 方法名 (接口类型 参数名){

​ 参数名.接口方法;

​ return 参数名;

}

Smoking s = smoking(); //相当于Smoking s = new Student(); Smoking 为接口

文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_38022166/article/details/115319912

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。