打小都说我聪明,自从学了 java内部类,我才如梦初醒

云惠网小编 2021年11月24日13:21:11
评论
3547字阅读11分49秒
摘要

???? Java学习路线配套文章:Java学习路线总结,搬砖工逆袭Java架构师(全网最强)???? 基础推荐:Java基础教程系列???? 实战推荐:Spring Boot基础教程???? 简介:Java领域优质创作者????、CSDN哪吒公众号作者✌ 、Java架构师奋斗者???????? 扫描主页左侧二维码,加入群聊,一起学习、一起进步???? 欢迎点赞 ???? 收藏 ⭐留言 ????目录一、内部类二、成员内部类1、什么是成员内部类2、代码实例3、成员内部类进阶代码实例4、控制台显示

广告也精彩

目录

    • 一、内部类
    • 二、成员内部类
      • 1、什么是成员内部类
      • 2、代码实例
      • 3、成员内部类进阶代码实例
      • 4、控制台显示
      • 5、外部类访问内部类
    • 三、局部内部类
    • 四、匿名内部类
      • 1、匿名内部类简介
      • 2、代码实例
      • 3、控制台输出
      • 4、访问权限
    • 五、静态内部类
    • 六、内部类的使用场景
    • 七、哪吒社区
public class Teacher {
private Integer id;
private String name;
class Student {
public Teacher getWoman(){
class Girl extends Teacher {   //局部内部类
int age =0;
}
return new Girl();
}
}
}

成员内部类是最常见的内部类,它就定义在类的内部。

4、控制台显示

4、访问权限

内部类也可以使用private、protected、public修饰,访问权限和正常情况下无异。

三、局部内部类

虽然内部类可以无条件的访问外部类,但,外部类好像不能随心所欲的访问内部类。
成员内部类是依附于外部类而存在的,所以说,创建内部类的时候,必须得有外部类,是不是这样呢?让我们一探究竟。

六、内部类的使用场景

  1. 成员内部类
  2. 局部内部类
  3. 匿名内部类
  4. 静态内部类

在这里插入图片描述

二、成员内部类

1、什么是成员内部类

5、外部类访问内部类

    private Student getStudentInstance(){
return new Student();
}
public static void main(String[] args) {
Teacher teacher = new Teacher();
Student student = teacher.getStudentInstance();
student.speak();
}

外部类访问内部类第二种方式:

package com.guor.bean;
public class Teacher implements Cloneable {
private Integer id;
private String name;
private final String const_NEZHA = "哪吒";
private void study(){
System.out.println("我是哪吒");
}
private void speak(){
Student student = new Student();
student.speak();
}
class Student {
private Integer teacherId;
private String teacherName;
private void speak(){
System.out.println("我是"+const_NEZHA+"成员内部类");
}
}
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.speak();
}
}

静态内部类就是在局部内部类的基础上,加了一个static。
静态内部类是不需要依赖于外部类的,并且它不能使用外部类非static的变量和方法,其实这个很好理解,java的特性不就是这样的嘛。
打小都说我聪明,自从学了 java内部类,我才如梦初醒
秒懂百科,世界因你不同。

🍅 Java学习路线配套文章:Java学习路线总结,搬砖工逆袭Java架构师(全网最强)
🍅 基础推荐:Java基础教程系列
🍅 实战推荐:Spring Boot基础教程
🍅 简介:Java领域优质创作者🏆、CSDN哪吒公众号作者✌ 、Java架构师奋斗者💪
🍅 扫描主页左侧二维码,加入群聊,一起学习、一起进步
🍅 欢迎点赞 👍 收藏 ⭐留言 📝

上述代码中,类Student是类Teacher的一个成员,Teacher类称为外部类。成员内部类可以无条件访问外部类的所有成员属性和成员方法,包括private成员和静态成员。

代码需要用心去感悟。

局部内部类,顾名思义,是定义在一个方法内或者一个作用域内的类,它和成员内部类的区别在于局部内部类的访问权限仅限于访问内或某作用域内。

内部类分为四种:

  1. 匿名内部类可以访问外部类的所有成员;
  2. 匿名内部类定义的变量会屏蔽其作用域范围内的其它同名变量;
    这个在局部内部类测试过了,这里我就不做代码介绍了。

外部类访问内部类第一种方式:

package com.guor.bean;
public class Teacher implements Cloneable {
private Integer id;
private String name;
private final String const_NEZHA = "哪吒";
private void study(){
System.out.println("我是哪吒");
}
private void speak(){
Student student = new Student();
student.speak();
}
class Student {
private Integer teacherId;
private String teacherName;
private static final String const_NEZHA = "比比东";
private void speak(){
System.out.println("我是"+Teacher.this.const_NEZHA+"成员内部类");
}
}
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.speak();
}
}

七、哪吒社区

五、静态内部类

2、代码实例

3、成员内部类进阶代码实例

局部内部类就像方法里的局部变量一样,是不能有修饰符修饰的。

1、匿名内部类简介

2、代码实例

    public static void main(String[] args) {
Teacher teacher = new Teacher();
Student student = teacher.new Student();
student.speak();
}

下一篇:【Java8 新特性 1】java8 lambda表达式

一、内部类

在这里插入图片描述

package com.guor.bean;
public class Student {
private Integer id;
private String name;
interface StudyJava{
void study();
}
private void work(){
// 1、局部内部类实现Java接口
class StudyJavaImpl implements StudyJava {
final String name = "javase";
@Override
public void study() {
System.out.println("哪吒 study "+name);
}
}
StudyJava studyJavaImpl = new StudyJavaImpl();
studyJavaImpl.study();
// 2、匿名内部类实现study方法
StudyJava studyJava = new StudyJava() {
final String name = "spring";
@Override
public void study() {
System.out.println("云韵 study " + name);
}
};
studyJava.study();
}
public static void main(String[] args) {
Student student = new Student();
student.work();
}
}

四、匿名内部类

  1. 每个内部类都可以独立的继承一个类,所以无论外部类是否继承了某个类,内部类依然可以继承其他类,这就完美的解决了java没有多继承的问题。
  2. 可以有效的将有一定关系的类组织在一起,又可以对外界有所隐藏。
  3. 方便编写事件驱动程序
  4. 方便编写多线程代码
  5. 用来装逼,代码越复杂,是不是感觉越牛逼。

添加微信,备注1024,赠送Java学习路线思维导图

3、控制台输出

  1. Java从入门到项目实战
  2. SQL从入门到精通
  3. 中文版3ds Max 2020+VRay效果图制作从入门到精通 3dmax教程
  4. 中文版 Photoshop 2020 完全案例教程PS书籍
    在这里插入图片描述

匿名内部类可以使你的代码更加简洁,定义一个类的同时对其进行实例化,它与局部内部类很相似,不同的是它没有类名,如果某个局部类你只需要使用一次,那么就可以使用匿名内部类。

在这里插入图片描述

有一点是需要注意的,那就是如果内部类拥有和外部类同名的成员变量或方法时,会发生隐藏现象,默认情况下回访问成员内部类的成员,如果要访问外部类的成员变量,需要使用外部类.this.成员变量的形式。

在这里插入图片描述

上一篇:【Java基础知识 15】java反射机制原理详解

 


 

扫码加入技术交流群!

关注微信公众号,回复1024,获取Java思维导图

本文转自 https://blog.csdn.net/guorui_java/article/details/121442190

腾讯云618
云惠网小编
cgb2110-day06 java

cgb2110-day06

文章目录一,模拟用户登录过程--1,需求--2,测试--3,程序优化二,SQL攻击/注入--1,概述--2,解决方案--3,修改代码--4,两种传输器的区别三,练习新的传输器--1...
JAVA 初级程序员常见问题分析 java

JAVA 初级程序员常见问题分析

1、怎么样可以尽快拿到offer?针对心仪的企业、岗位进行调查。可以上招聘网站看看其岗位要求,以及企业的面试题。然后针对性的学习其要求的技术。这样有针对性的准备,投其所好,就可更快...
关于数据库学习的一些知识盲区 java

关于数据库学习的一些知识盲区

一.SQL拼接方法的安全风险 1. SQL注入问题(SQL Inject),使用字符串拼接构造SQL就会引起SQL注入。 2. SQL注入是存在安全风险的 3. 例如:在图书管理系...
szu-exp 安卓开发实验3我的校园 java

szu-exp 安卓开发实验3我的校园

发扬开源精神... 给个赞吧giegiejiejie们 实验目的与要求: 目的:掌握安卓中活动的编写、自定义用户界面的开发、碎片开发、广播机制以及数据持久化技术等;并能通过对课堂知...
腾讯云618

发表评论