什么是实例内部类 Instance inner class有什么语法?
1.Instance inner class定义,用途和用法
重要语法:马克-to-win:1)实例内部类一定得有个外层类的实例和它绑定在一起,所以可以用This指针。所以必须先实例化外层类之后才能再实例化内部类。(生活中的例子就是子宫和胚胎(不算试管婴儿!))2)语法规定:实例内部类不能有静态的属性或方法,为什么?因为没有外层类的实例就不应该有实例内部类的任何东西存在,包括内部类的静态属性,但静态属性应该在main方法执行时创建,这样就会产生矛盾,所以规定实例内部类不能有静态的属性或方法。马克-to-win:2)既然每个内部类实例都可以改变他们共同的外层类的静态属性或实例属性,他们成为内部类实例们可以交互的地方。(下例中的shell_x,在不断增长。)
例2.1a:类中有个内部类属性。
class ShellMark_to_win {
int shell_x = 100;//既然每个内部类实例都可以改变这里的外层类静态属性或实例属性,马克-to-win:这里成为内部类实例们可以交互的地方
static int n;
Core core;
void visitCore() {
core = new Core();
core.y=8;
core.display();
}
// 下面是个实例内部类,必须有个外层类实例,才能有这个内部类实例。所以就有了this这个概念。
class Core {
/* 下一句错误,根据语法:马克-to-win:静态的域或方法只能出现在静态类或最外层类上。The field m cannot be declared static; static fields can only be declared in static inner class or top level classes,*/
// static int m=9;
int y = 10; // y is local to core
void display() {
shell_x=shell_x+20;
n=n+1;//轻松访问外层类的静态变量
System.out.println("n is "+n+" display: shell_x and y " + shell_x + " "+ShellMark_to_win.this.shell_x+ " " + y+ " "+this.y);
}
}
Core newC()
{
return new Core();
}
void showy() {
// y=9; // 错误,马克-to-win:外层类不能直接访问内部类的属性。error,y not known here! System.out.println(y);
}
}
public class Test {
public static void main(String args[]) {
ShellMark_to_win shell = new ShellMark_to_win();
shell.visitCore();
ShellMark_to_win.Core sc=shell.new Core();//内部类实例是存在于外部对象里的。
sc.display();
ShellMark_to_win.Core sc1=shell.newC();
sc1.display();
/* 不能像下面这样写, 因为Core 是内部类。 can not resolve Core class ,because Core class are defiened as ShellMark_to_win's inner class. */
//Core core = new Core();
}
}
例2.1:---
class ShellMark_to_win {
int shell_x = 100;//既然每个内部类实例都可以改变这里的外层类静态属性或实例属性,马克-to-win:这里成为内部类实例们可以交互的地方
static int n;
void visitCore() {
Core core = new Core();
core.y=8;
core.display();
}
// 下面是个实例内部类,必须有个外层类实例,才能有这个内部类实例。所以就有了this这个概念。
class Core {
/* 下一句错误,根据语法:马克-to-win:静态的域或方法只能出现在静态类或最外层类上。The field m cannot be declared static; static fields can only be declared in static inner class or top level classes,*/
// static int m=9;
int y = 10; // y is local to core
void display() {
shell_x=shell_x+20;
n=n+1;//轻松访问外层类的静态变量
System.out.println("n is "+n+" display: shell_x and y " + shell_x + " "+ShellMark_to_win.this.shell_x+ " " + y+ " "+this.y);
}
}
Core newC()
{
return new Core();
}
void showy() {
// y=9; // 错误,马克-to-win:外层类不能直接访问内部类的属性。error,y not known here! System.out.println(y);
}
}
public class Test {
public static void main(String args[]) {
更多内容请见原文,文章转载自:https://blog.csdn.net/qq_44639795/article/details/103110350
什么是实例内部类 Instance inner class有什么语法?的更多相关文章
- OC 实例变量(instance var)与属性(@property)的关系 isa指针
实例变量(instance var)与属性(@property)的关系 Objective-C 2.0之后,声明一个@property name自动产生一个实例变量,名为_name,因此省去实例变量和 ...
- React实例入门教程(1)基础API,JSX语法--hello world
前 言 毫无疑问,react是目前最最热门的框架(没有之一),了解并学习使用React,可以说是现在每个前端工程师都需要的. 在前端领域,一个框架为何会如此之火爆,无外乎两个原因:性能优秀,开发 ...
- 【原创】React实例入门教程(1)基础API,JSX语法--hello world
前 言 毫无疑问,react是目前最最热门的框架(没有之一),了解并学习使用React,可以说是现在每个前端工程师都需要的. 在前端领域,一个框架为何会如此之火爆,无外乎两个原因:性能优秀,开发效率 ...
- Linux/Unix shell 监控Oracle实例(monitor instance)
使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...
- C#代码实现,确保windows程序只有一个实例(instance)
static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static vo ...
- 获取当前应用程序实例(instance:HINSTANCE)(转)
if using MFC AfxGetInstanceHandle(). For console programs, call GetConsoleWindow() to get the HWND t ...
- (转)实例简述Spring AOP之间对AspectJ语法的支持(转)
Spring的AOP可以通过对@AspectJ注解的支持和在XML中配置来实现,本文通过实例简述如何在Spring中使用AspectJ.一:使用AspectJ注解:1,启用对AspectJ的支持:通过 ...
- 居然有这种操作?各路公司面试题(作者:马克-to-win)
我喜欢考试,不考试,谁知道哪些掌握了哪些没有?? 面试什么的最有爱了(变态笑)~~~ http://www.mark-to-win.com/JavaBeginner/JavaBeginner4_web ...
- OC 实例变量(Instance Var)和成员变量(member var)区别
摘要: Objective-C 引入了“实例变量"的概念,但同时, 也经常出现 “成员变量”的声音. 到底什么是实例变量,什么是成员变量,二者的区别是什么呢? 今天查看apple 的官方 ...
随机推荐
- JZ-051-构建乘积数组
构建乘积数组 题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1]. ...
- 『德不孤』Pytest框架 — 12、Pytest中Fixture装饰器(二)
目录 5.addfinalizer关键字 6.带返回值的Fixture 7.Fixture实现参数化 (1)params参数的使用 (2)进阶使用 8.@pytest.mark.usefixtures ...
- 微信请求tp5框架数据 及渲染数据至页面
tp模型数据: namespace app\xcx\model; use think\Model; class XcxModel extends Model { //链接数据库表名 protected ...
- gitee的使用
git clone git add . # 跟踪所有改动过的文件 git commit -m "commit message" # 提交所有更新过的文件 git checkout ...
- VUE3 之 状态动画 - 这个系列的教程通俗易懂,适合新手
1. 概述 老话说的好:不用羡慕别人,每个人都有属于自己的人生道路,重要的是在前进道路上遇见阻碍时,如何去积极的面对并解决. 言归正传,今天我们来聊聊 VUE 的状态动画. 2. 状态动画 2.1 数 ...
- Intellij IDEA远程debug线上项目记录
远程调试,特别是当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用. JAVA 支持调试功能,本身提供了一个简单的调试工具JDB,支持设置断点及线程级的调试同时,不同的JVM通过 ...
- Linux中8个有用的touch命令
在Linux中,每个文件都有时间戳,并且每个文件都存储上次访问时间,上次修改时间,上次改变时间的信息.因此,无论什么时候我们创建新的文件,访问或者修改一个存在的文件,那个文件的时间戳会自动被更改. 在 ...
- react中使用截图组件Cropper组件
--最近项目用react,学习react并使用cropper组件裁剪图片. (这里开发组件不够统一有用tsx(TypeScript + xml/html)写的组件,有用jsx(javascript+x ...
- Spring Security实现统一登录与权限控制
1 项目介绍 最开始是一个单体应用,所有功能模块都写在一个项目里,后来觉得项目越来越大,于是决定把一些功能拆分出去,形成一个一个独立的微服务,于是就有个问题了,登录.退出.权限控制这些东西怎么办呢? ...
- 07模块化设计之top_down
一设计功能:(一)用两个分频模块,实现16分频,且让输入a 和b在16个系统时钟内,相与一次. (二)模块化设计思想(结构化思维) 拆分,即把一个系统划分成多个功能模块,控制模块,组合模块.然后从功能 ...