java内部类之成员内部类
内部类概念:顾名思义,就是将一个类定义在另一个个类内部。内部的类称之为内部类 。
内部类的主要特点:
1.内部类可以很好的实现隐藏,可以使用protected、private修饰符。
2.内部类可以直接访问外部类的所有成员,包括私有成员。
3.外部类不能直接访问内部类的成员,必须首先要建立内部类的对象才可以访问。
4.内部类可以解决一些问题,比如间接地实现继承。可以避免修改接口而实现同一个类
中两种同名方法的调用
内部类有四种:
成员内部类,静态内部类,匿名内部类,局部内部类
起名字时,$符号是合法字符,是为内部类准备的
成员的内部类特点:
1.成员内部类属于外部类的实例成员,成员内部类可以有public,private,default,
protected权限修饰符。在成员内部类中访问外部类的成员方法和属性,要使用“外部
类名.this.成员方法”和“外部类名.this.成员属性”的形式。
2.创建成员内部类的实例使用“外部类名.内部类名 实例名=外部类实例名.new 内部
类构造方法(参数)”的形式。
成员内部类的限制:
1.成员内部类不能与外部类重名
2.不能在成员内部类中定义static属性、方法和类(static final形式的乘凉定义除外)因
为一个成员内部类实例必然与一个外部类实例关联,static成员完全可以移到其外部类
去。
public class MemberInnerClassDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Outer1 outer1 = new Outer1();
Outer1.Inner1 inner1 = outer1.new Inner1();
outer1.outer();
inner1.inner();
}
}
class Outer1{
private String name = "张三";
private int num1 = 1;
public void outer() {
System.out.println(name+" "+num1);
//System.out.println(num2);外部类不能直接访问内部类成员
Inner1 inner1 = new Inner1();//外部类可以实例化内部类,访问内部类
inner1.inner();
}
class Inner1{//如果内部类声明为private类型,则外部无法访问通过外部类内部类
private String name = "李四";
private int num2 = 2;
//private static final int num3 = 3;在成员内部类中可以声明静态常量
//private static int num3 = 3;在成员内部类中不能声明静态成员,包括属性和方法
public void inner() {
System.out.println(name+" "+num2);
System.out.println(Outer1.this.name+" "+Outer1.this.num1);//内部类调用外部类属性
outer();//内部类可以直接访问外部类的属性和方法,包括私有的
Outer1.this.outer();//和上面的一样,区别是如果内部类出现重名,那么这样可以解决
}
}
}
java内部类之成员内部类的更多相关文章
- java内部类之成员内部类之局部内部类
局部内部类特点: 1.定义在代码块.方法体内的类叫局部内部类 2.局部内部类访问外部类的属性和方法使用“外部类名.this.属性名”和“外部类名.this.方法名(参数)”的形式 3.对外部世界完全隐 ...
- Java -- 内部类, 成员内部类,局部内部类,匿名内部类,闭包和回调, 枚举类
1. 成员内部类分为 静态内部类 和 非静态内部类. 非静态内部类 和 外部类的其他成员一样处理, 非静态内部类可以访问外部类的private的属性,而外部类不能访问非静态内部类的属性,需要实例非静 ...
- java内部类之成员内部类之匿名内部类
匿名内部类特点:1.匿名内部类是没有名称的内部类,没办法引用它们.必须在创建时,作为new语句的一部分来声明并创建它们的实例.2.匿名内部类必须继承一个类(抽象的.非抽象的都可以)或者实现一个接口.如 ...
- java内部类之成员内部类实例
第一个是如何实现同时继承两个类 public class MultiExtendsDemo { public static void main(String[] args) { // TODO Aut ...
- Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)
Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液 ...
- Java内部类小程序(成员内部类,静态内部类,匿名内部类)
/** * 测试java内部类(成员内部类,静态内部类,匿名内部类) * 局部内部类不常用,就不写了. * @package :java05 * @author shaobn * @Describe ...
- Java 内部类(成员内部类、局部内部类、静态内部类,匿名内部类)
一.什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用publ ...
- 【09-04】java内部类学习笔记
java中的内部类 静态内部类 成员内部类 方法内部类 匿名内部类 1.静态内部类 class Outer { private static String outer = "outer&qu ...
- Java内部类详解
Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...
随机推荐
- IOS Core Image之一
项目中要实现高斯模糊的效果,今天看了下Core Image这块的内容, 主要包括CIImage.CIFilter.CIContext.CIDetector(检测).CIFeature(特征)等类. 今 ...
- 【angular5项目积累总结】消息订阅服务
code import { Injectable } from '@angular/core'; import { Subject } from 'rxjs/Subject'; @Injectable ...
- LINQ-let子句、join子句
1.Let子句 let子句用于在LINQ表达式中存储子表达式的计算结果,既let子句创建一个范围变量来存储结果,变量被创建后,不能修改或把其他表达式的结果重新赋值给它.此范围变量可以在后续的LINQ中 ...
- web弹出对话框
Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('请输入 ...
- layer子窗口与父窗口传值
layer作为优秀的jquery框架,可以用作弹出组件.日历.分页等,而且实现简单,只有几十k的大小. 此处给出弹出窗口时子窗口与父窗口的传值.js和css这里不展示引入(以下给出目录结构的图片),仅 ...
- <深入理解JavaScript>学习笔记(1)_编写高质量JavaScript代码的基本要点
注:本文是拜读了 深入理解JavaScript 之后深有感悟,故做次笔记方便之后查看. JQuery是一个很强大的JavaScript 类库,在我刚刚接触JavaScript的就开始用了. JQuer ...
- golang操作mysql数据库
golang操作mysql数据库 代码: mysql的增.删.改.查 package main import ( "database/sql" "fmt" &q ...
- [linux] C语言Linux系统编程-socket回声客户端
回声客户端: 1.所谓“回声”,是指客户端向服务器发送一条数据,服务器再将数据原样返回给客户端,就像声音一样,遇到障碍物会被“反弹回来”. 2.客户端也可以使用 write() / send() 函数 ...
- linux环境下mysql 5.7.1X 如何重置root密码
1,vi /etc/my.cnf [mysqld]下加入参数skip-grant-tables 保存退出. 2,重启mysql [root@21yunwei src]# /etc/init.d/ ...
- java设计模式-----5、原型模式
原型(Prototype)模式是一种对象创建型模式,他采取复制原型对象的方法来创建对象的实例.使用原型模式创建的实例,具有与原型一样的数据. 原型模式的特点: 1.由原型对象自身创建目标对象.也就是说 ...