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 ...
随机推荐
- LINUX下FD_SET介绍
刚刚了解了linux下select系统调用,函数原型是 #include <sys/select.h> #include <sys/time.h> int select(int ...
- HTML 5 在Web SQL 使用演示样本
Web sql 这是一个模拟数据库浏览器.可以使用JS操作SQL完成数据读取和写入,但是这件事情并不多,现在支持的浏览器,而其W3C规格已经停止支持.外形似它的前景不是很亮. W3C 规范:http: ...
- Retrofit相关资料
高速Android开发系列网络篇之Retrofithttp://www.w3c.com.cn/%E5%BF%AB%E9%80%9Fandroid%E5%BC%80%E5%8F%91%E7%B3%BB% ...
- Hudson+Maven+Svn搭建持续集成环境
Hudson+Maven+Svn搭建持续集成环境 博客分类: 配置管理 mavenSVNTomcat项目管理配置管理 一.所用开发工具 1. Hudson: Hudson 是一种革命性的开放源码 ...
- 更新部分字段 NHibernate
更新部分字段 NHibernate 概述: 在有些情况下,我只想更新记录中的一个字段的值.比如:浏览完这条记录后,我把其中的是否浏览置为1. Nhibernate中提供了Native SQL,其中有一 ...
- RPC服务的发布订阅实现Thrift
Thrift 个人实战--RPC服务的发布订阅实现(基于Zookeeper服务) 前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的 ...
- html5 canvas+js实现ps钢笔抠图
html5 canvas+js实现ps钢笔抠图 1. 项目要求需要用js实现photoshop中钢笔抠图功能,就用了近三四天的时间去解决它,最终还是基本上把他实现了. 做的过程中走了不少弯路,最终一同 ...
- Asp.Net Web Api 接口,拥抱支持跨域访问。
如何让你的 Asp.Net Web Api 接口,拥抱支持跨域访问. 由于 web api 项目通常是被做成了一个独立站点,来提供数据,在做web api 项目的时候,不免前端会遇到跨域访问接口的问题 ...
- 4 MySQL与PHP连接
目录: 1. 连接概述2. 创建php文件进行MySQL连接3. 查看连接效果 1. 连接概述 上文讲述了LAMP开发模型,并且使用AppServ进行安装.这时候就要体现优势了.本节将介绍在直接使用P ...
- CODEFORCES #272 DIV2[为填完]
#272是自己打的第一场cf,感觉这一套质量挺棒的,不像后两场略水 //先附上A,B,C的题解,因为离noip只剩下一点时间了,所以之后不一定还刷cf,暂且就先放上前三题好了 A题目大意忘了.懒得看, ...