JAVA基础之内部类
JAVA基础之内部类
2017-01-13
1、java中的内部类都有什么?!
成员内部类
局部内部类
匿名内部类
静态内部类
2、内部类详解
•成员内部类
在一个类的内部再创建一个类,成为内部类
1)在一个类中使用内部类,可以在内部类中直接存取所在类的私有属性或方法
class Outer{
//外部类Outer
private int i = 111 ;//外部类私有变量
class Inner{
//内部类Inner
private int j = 222 ;//内部类私有变量
public void print(){
System.out.println("外部类的私有属性"+ i);
System.out.println("内部类的私有属性"+ j);
}
}
}
public class ClassDemo5 {
public static void main(String[] args) {
Outer o = new Outer() ;
Outer.Inner i = o.new Inner() ;
i.print() ;
}
}
2)内部类的实例化方法
import 面向对象基础.Outer.Inner;
//第一种方式:导入import 面向对象基础.Outer.Inner;包
Outer.Inner i = o.new Inner() ;
//第二种方式:外部类.内部类 对象名 = 外部类对象.new 内部类
3)外部类访问内部类
class Fatch{
//外部类Fatch
public class Student{
//内部类Student
public void show(){
//内部类show()方法
System.out.println("内部类Student的show()方法");
}
}
public void print(){
/**
* 外部类不可以直接访问内部类的属性或方法,
* 必须创建内部类对象才可以访问
*/
new Student().show() ; //使用匿名对象实例化调用内部类的类成员
System.out.println("外部类Fatch的print()方法");
}
}
public class ClassDemo4 {
public static void main(String[] args) {
Fatch f = new Fatch() ; //实例化外部类对象
f.print() ; //调用外部类的print()方法
}
}
4)如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。
class Outer1 {
//外部类
private int i = 10 ;//外部类私有变量
class Inner1{
//内部类
private int i = 20 ;//内部类私有变量
public void show(){
//内部类方法
System.out.println("内部类的变量"+ this.i );//使用this关键字访问内部类成员
System.out.println("外部类的变量"+ Outer1.this.i);//使用外部类名.this.变量名 来访问外部类成员
}
}
public void print(){
new Inner1().show() ; //调用内部类方法
}
}
public class ClassDemo6 {
public static void main(String[] args) {
new Outer1().print() ;
} }
•注意点:
»实例化内部类之前必须实例化外部类
»内部类可以随意访问他的外部类成员,但外部类不可以直接访问内部类的类成员
»内部类可以被声明为private 或 protected 权限的访问
»内部类对象会依赖于外部类对象,除非已经存在一个外部类对象,否则类中不会出现内部类对象
•局部内部类(方法内部类)
内部类不仅可以在类中进行定义,也可以在类的局部位置进行定义,例如在类的方法或者任意的作用域中都可以定义内部类
1)在外部类的方法中定义一个方法内部类
class Demo1{
//外部类Demo
final int I = 10 ;//外部类定义的常量
public void show(){ //外部类的show()方法
class Inne{ //方法内部类
int j = 20 ; //方法内部类变量
private void inshow() { //方法内部类中的inshow()方法
System.out.println("外部类常量"+ I );
System.out.println("方法内部类变量"+ j );
}
}
Inne in = new Inne() ; //实例化内部类对象
in.inshow() ; //调用内部类方法
}
}
public class ClassDemo7 {
public static void main(String[] args) {
Demo1 d = new Demo1() ;
d.show() ;
}
}
注意:如果方法中的参数需要被传递进去,就必须把参数声明成final类型
•静态内部类
如果一个内部类被声明为static,此内部类就称为外部类
1)静态内部类可以通过(new 外部类名.内部类.内部类方法名) ,来调用静态内部类方法
class Outer2{
//外部类
private static String str = "张博杰" ;//外部类的静态变量
static class Inner2{
//使用static声明 的静态内部类
public void fun() {
//静态内部类方法
System.out.println("外部类的静态变量"+" "+ str);
}
}
}
public class ClassDemo8 {
public static void main(String[] args) {
new Outer2.Inner2().fun() ;
//静态内部类可以使用new 外部类名.内部类.内部类方法名 ,来调用静态内部类方法
}
}
•匿名内部类
匿名内部类也就是没有名字的内部类,正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写.使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口
1)匿名内部类的实现
abstract class A2 { //抽象类A2
public abstract void eat() ;
}
public class ClassDemo9 {
public static void main(String[] args) {
/**
* 如果A2这个抽象类只用一次,那么就可一使用匿名内部类来实现
*/
A2 a = new A2(){
public void eat(){
System.out.println("我要吃饭");
}
} ;
a.eat() ;
}
}
JAVA基础之内部类的更多相关文章
- 黑马程序员——JAVA基础之内部类,匿名内部类
------- android培训.java培训.期待与您交流! ---------- 内部类 将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类). 内部类访问特点: • 内部 ...
- Java面向对象之内部类(访问格式)
一.基础概念 1.内部类是定义在类中的类.A类需要直接访问B类中的成员时,可以将A类定义到B类中,作为B类的内部类存在. 2.内部类可以相当于外部类中的一个成员,可以被成员修饰符所修饰.(如:publ ...
- Java系列之内部类
今天温习一下 Java 中的内部类,内部类一般有如下几种:静态内部类.成员内部类.匿名内部类和方法内部类,下文中将主要介绍静态内部类和成员内部类,主要内容如下: 概述 静态内部类 成员内部类 匿名内部 ...
- Java学习之内部类
示例1: package com.swust.面向对象; class Person1{ private String username="zhangsan"; public Per ...
- Java面向对象之内部类(匿名内部类)
一.基础概念 匿名内部类:简化书写的内部类.其实匿名内部类就是一个子类对象. 前提:内部类需要继承或者实现外部的类或者接口. 格式:new 父类或者接口(){定义子类的内容} 二.将内部类定义到局部的 ...
- [内部类] java笔记之内部类
1.内部类的分类 2.成员内部类的定义格式 3.一旦使用了内部类,那么生成的class文件长啥样? 其中Body是外部类,Heart是Body的内部类,所以中间有个美元符号$,所以给类进行命名时,不要 ...
- Java基础00-内部类23
1. 内部类 内部类 1.1 内部类概述 代码示例: 1.2 成员内部类 代码示例: 创建一个成员内部类:定义时没有小括号是因为类是没有形参的.在类的成员位置,就是成员内部类了 创建测试类:这里发现不 ...
- java之内部类
最近学了java,对内部类有一点拙见,现在分享一下 所谓内部类(nested classes),即:面向对象程序设计中,可以在一个类的内部定义另一个类. 内部类不是很好理解,但说白了其实也就是一个类中 ...
- Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
随机推荐
- CSS3 实现六边形Div图片展示效果
原文:CSS3 实现六边形Div图片展示效果 效果图: 实现原理: 这个效果的主要css样式有: 1.>transform: rotate(120deg); 图片旋转 2.>overflo ...
- 分享12款经典时尚的HTML5应用
分享伟大,呵呵.今天给大家分享一下收集的12个HTML5小特效. 我整理一下源码,给大家打包一下,我博客园上传文件大小有限,传不了了. 需要的请留下邮箱就行了,觉得好的话,不要忘了点赞哦~ 1.CSS ...
- 介绍开源的项目管理系统-Redmine
介绍开源的项目管理系统-Redmine 分类: Redmine2009-06-01 10:12 1047人阅读 评论(0) 收藏 举报 项目管理subversionphpmyadminrailsaut ...
- 开源框架之TAB控件
我的开源框架之TAB控件 需求 (1)支持iframe.html.json格式的tab内容远程请求 (2)支持动态添加tab (3)支持远程加载完成监听,支持tab激活事件监听 (4)支持relo ...
- .NET MVC4 实训记录之四(Unit of work + Repository)
今日后开启进阶模式! 谈到MVC与EntityFramework,则不得不说一说事务与仓储(Unit of work + Repository). 仓储(Repository):领域对象集合.用于操作 ...
- 回车tab切换
//event表示事件对象,keyCode表示键值,srcElement事件源 function changeCommand(){ //如果按下的是回车,并且不是提交按钮,不是重置按钮,则回车认为是t ...
- Mock原理学习
同事搓蛋问了我一个问题,mock的原理是啥,没怎么想出来,于是花了点时间学习了一下. 从Moq这个库入手:https://github.com/moq/moq4 Moq用到了Castle的库用于Dyn ...
- 【Oracle】-【COMMIT对索引的影响】-从trace看COMMIT对索引的影响
之前看过老杨http://yangtingkun.itpub.net/post/468/231000的一篇文章,讲述了INSERT操作对全文索引无操作,但DELETE时为了防止删除的数据仍能通过索引的 ...
- Step one : 熟悉Unix/Linux Shell 常见命令行 (三)
3.学会使用一些管理命令 ps/top/lsof/netstat/kill/tcpdump/iptables/dd 端口查看 ps -- process status ps aux 观察程序所有程序 ...
- iOS基础 - 数据库CoreData
一.iOS应用数据存取的常用方式 XML属性列表 —— PList NSKeyedArchiver 归档 Preference(偏好设置) SQLite3 Core Data 二.Core Data简 ...