java内部类的用法

一、 定义
放在一个类的内部的类我们就叫内部类。
二、 作用
1.内部类可以很好的实现隐藏,也就是封装性。一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
2.内部类拥有外围类的所有元素的访问权限
3.可是实现多重继承
4.可以避免修改接口而实现同一个类中两种同名方法的调用

三、 例子
1.实现隐藏
平时我们对类的访问权限,都是通过类前面的访问修饰符来限制的,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以,所以我们能通过内部类来隐藏我们的信息。可以看下面的例子
Java代码
package beyondx;

public class Example {

private class InsideClass implements InterfaceTest
{
public void test()
{
System.out.println("这是一个测试");
}
}
public InterfaceTest getIn()
{
return new InsideClass();
}
}

上面的InsideClass就是一个内部类,访问修饰符是private
客户端程序
Java代码
package insidecategory;

public class TestExample {

public static void main(String args[])
{
Example a=new Example();
InterfaceTest a1=a.getIn();
a1.test();
}
}

从这段代码里面我只知道Example的getIn()方法能返回一个InterfaceTest 实例但我并不知道这个实例是这么实现的。而且由于InsideClass 是private的,所以我们如果不看代码的话根本看不到这个具体类的名字,所以说它可以很好的实现隐藏。
2.可以无条件地访问外围类的所有元素
Java代码
package beyondx;

public class TagBean {

private String name="luffyke";
private class InTest
{
public InTest()
{
System.out.println(name);
}
}
public void test()
{
new InTest();
}
public static void main(String args[])
{
TagBean bb=new TagBean();
bb.test();
}
}

看上面name这个变量是在TagBean里面定义的私有变量。这个变量在内部类中可以无条件地访问System.out.println(name);
3.可以实现多重继承
这个特点非常重要,个人认为它是内部类存在的最大理由之一。正是由于他的存在使得Java的继承机制更加完善。大家都知道Java只能继承一个类,它的多重继承在我们没有学习内部类之前是用接口来实现的。但使用接口有时候有很多不方便的地方。比如我们实现一个接口就必须实现它里面的所有方法。而有了内部类就不一样了。它可以使我们的类继承多个具体类或抽象类。大家看下面的例子。
类一
Java代码
package beyondx;

public class Example1 {

public String name()
{
return "luffyke";
}
}

类二
Java代码
package beyondx;

public class Example2 {

public int age()
{
return 25;
}
}

类三
Java代码
package beyondx;

public class MainExample
{
private class test1 extends Example1
{
public String name()
{
return super.name();
}
}
private class test2 extends Example2
{
public int age()
{
return super.age();
}
}
public String name()
{
return new test1().name();
}
public int age()
{
return new test2().age();
}
public static void main(String args[])
{
MainExample mi=new MainExample();
System.out.println("姓名:"+mi.name());
System.out.println("年龄:"+mi.age());
}
}

大家注意看类三,里面分别实现了两个内部类 test1,和test2 ,test1类又继承了Example1,test2继承了Example2,这样我们的类三MainExample就拥有了Example1和Example2的方法和属性,也就间接地实现了多继承。
四、 避免修改接口而实现同一个类中两种同名方法的调用。
大家假想一下如果,你的类要继承一个类,还要实现一个接口,可是你发觉你继承的类和接口里面有两个同名的方法怎么办?你怎么区分它们??这就需要我们的内部类了。看下面的代码
接口
Java代码
package beyondx;

public interface Incrementable
{
void increment();
}

类 MyIncrement
Java代码
package beyondx;

public class MyIncrement {

public void increment()
{
System.out.println("Other increment()");
}
static void f(MyIncrement f)
{
f.increment();
}

}

大家看上面加黑的部分,两个方法都是一样的。在看下面这个类要继承这两个类
如果不用内部类
Java代码
package beyondx;

public class Callee2 extends MyIncrement implements Incrementable
{
public void increment()
{
//代码
}
}

想问一下大家increment()这个方法是属于覆盖MyIncrement这里的方法呢?还是Incrementable这里的方法。我怎么能调到MyIncrement这里的方法?显然这是不好区分的。而我们如果用内部类就很好解决这一问题了。看下面代码
Java代码
package beyondx;

public class Callee2 extends MyIncrement
{
private int i=0;
private void incr()
{
i++;
System.out.println(i);
}
private class Closure implements Incrementable
{
public void increment()
{
incr();
}
}
Incrementable getCallbackReference()
{
return new Closure();
}
}

我们可以用内部类来实现接口,这样就不会与外围类的方法冲突了。
51单片机IAP技术详解:从原理到实战,实现远程程序自更新 在嵌入式系统开发中,程序更新是产品维护和功能迭代的核心需求。传统方式依赖外部烧录器,操作繁琐且无法远程进行。IAP(在应用中编程)技术则从原理层面解决了这一难题,它允许单片机在运行过程中通过特定接口(如串口)动态修改自身的Flash程序存储器。这项技术的核心价值在于赋予设备远程升级和自主维护的能力,极大地延长了产品生命周期并降低了维护成本。其典型应用场景包括智能家居控制器、工业数据采集模块和远程仪表等部署后不便拆卸的设备。本文以经典的51单片机(如STC89C52)为例,深入剖析IAP的实现,其中Bootl 阅读详情

相关推荐

手把手教你从入门到精通C# MES通信

本文是C#与MES通信通信的目录,使用C#与各种MES系统通信的方法我都会在专栏中讲到,比如WebService、Http、Ftp、共享文件夹、串口通信等,绝对是上位机软件工程师实现与MES系统通信的必备教程!

qq_34059233的博客 8545

Java学习笔记-13,内部类使用

内部类 非静态内部类 内部类可以直接访问外部类的成员public,private,protectd) 不能用static修饰 先实new一个外部类,才能new一个内部类 内部类可以使用 private 或 protected 来修饰,如果你不希望内部类被外部类访问可以使用 private 修饰符: class OuterClass { int x = 10; class InnerClass { int y = 5; } } public class MyMai

weixin_47303191的博客 1083

keil工程After Build/Rebuild添加带参.exe实现全流程(2):带参调用.exe的几种方法

keil工程After Build/Rebuild添加带参.exe实现全流程(2):带参调用.exe的几种方法。

kevin1499的博客 1604

Java内部类成员内部类、局部内部类、匿名内部类

内部类分为:成员内部类(静态成员内部类与非静态成员内部类)、局部内部类、匿名内部类成员内部类内部类可以被private或protected修饰 ②可以直接调用外部类的所有成员,包括私有数据 ③如果是静态内部类,则只能使用外部类中的静态成员,不能使用非静态成员 ④可以在内部定义属性、方法、构造器等结构 ⑤可以声明为abstract类,并且可以被其他内部类继承 ⑥可以被final修饰 ⑦编译后会生成OuterClass$InnerClass.class字节码文件 ⑧非静态的成员内部类不能声明静态成

木鱼不会水的博客 457

使用private修饰内部类

public class OuterClass { private class InnerClass { public void print() { System.out.println("打印内部类 "); } } public static void main(String[] args) { ...

岳豪的博客 4512

JAVA基础系列(2)—— 内部类

一、 定义 放在一个类的内部的类我们就叫它做内部类。 [code="java"] public class OuterClass{//外部类 private class InnerClass{}//内部类 }[/code] 二、 作用 1.内部类可以很好的实现隐藏,也就是封装性。一般的非内部类,是不允许有 private 与protec...

iteye_704的博客 293

JAVA核心技术】内部类

Java 内部类 Java 一个类中可以嵌套另外一个类,语法格式如下: class OuterClass { // 外部类 // ... class NestedClass { // 嵌套类,或称为内部类 // ... } } 要访问内部类,可以通过创建外部类的对象,然后创建内部类的对象来实现。 嵌套类有两种类型: 非静态内部类 静态内部类 非静态内部类 非静态内部类是一个类中嵌套着另外一个类。 它有访问外部类成员的权限, 通常被称为内部类。 由于内部类嵌套

悟以往之不谏,知来者之可追 404

Java内部类的介绍及其用法

/定义一个内部类 class InnerClass {} }当然,内部类可以进行嵌套:建议嵌套层次不要太多。注意:1.定义在class 类名{}花括号外部的即使是在一个文件里都不能称为内部类。此处的A和B就是两个单独的类。2.内部类和外部类共用同一个java源文件但是经过编译之后内部类会形成单独的字节码文件。

weixin_73906153的博客 827

浅谈java内部类用法

学习自: http://www.cnblogs.com/chenssy/p/3388487.html http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html 定义:内部类是指在一个外部类的内部再定义一个类 特性: a) 内部类可以是静态static的,也可用public,default,...

atb37220的博客 155

java 局部内部类使用_Java局部内部类原理与用法实例分析

本文实例讲述了Java局部内部类原理与用法。分享给大家供大家参考,具体如下:一 点睛如果把一个内部类放在方法中定义,那么这个内部类就是一个局部内部类,局部内部类仅在方法里有效。由于局部内部类不能在外部类的方法以外的地方使用,因此局部内部类也不能使用控制符合static修饰符修饰。如果需要用局部内部类定义变量、创建实例或派生子类,那么都只能在局部内部类所在的方法中进行。二 代码public clas...

weixin_34329350的博客 318

java 遍历所有内部类_Java内部类原理与用法实例总结

本文实例讲述了Java内部类原理与用法。分享给大家供大家参考,具体如下:一、非静态内部类public class OutClass {private String name = "outclass";public void show() {System.out.println(this.name);}public void innerShow() {InnerClass inner = new I...

weixin_35816805的博客 307

Java 内部类特点及用法

1内部类定义在成员变量位置上:可以直接访问外部类成员;可以被private和static 修饰;被static修饰的内部类只能访问外部类中的静态成员。 2、内部类定义在局部位置:也可以直接访问外部类成员;不可以被private和static 修饰;可以访问局部中的局部变量,但必须是被final修饰的。 package com.mashen.inner; class TestInner {

xuds12354的博客 495

java匿名内部类原理_Java匿名内部类原理与用法详解

本文实例讲述了Java匿名内部类原理与用法。分享给大家供大家参考,具体如下:一 点睛匿名内部类适合创建那种只需要一次使用的类,定义匿名内部类的语法格式如下:new 父类构造器(实参列表) | 实现接口(){//匿名内部类的类体部分}从上面的定义可以看出,匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。两条规则。匿名内部类不能是抽象类。匿名内部类不能定义构造器。由...

weixin_29421409的博客 481

Java基础(内部类和匿名内部类用法

Java内部类和匿名内部类用法 一、内部类:  (1内部类的同名方法 内部类可以调用外部类的方法,如果内部类有同名方法必须使用"OuterClass.this.MethodName()"格式调用(其中OuterClass与MethodName换成实际外部类名及其方法;this为关键字,表示对外部类的引用);若内部类无同名方法可以直接调用外部类的方法。 但外围类无法直接调用内部类的private方法,外部类同样...

m0_60237095的博客 1582

Java---内部类的定义与用法

一. 内部类概述内部类是定义在另一个类中的类,内部类也是封装的一种的体现。为什么要使用内部类,主要有两个内部类可以对同一个包的其他类进行隐藏。内部类方法可以访问定义这个类的作用域中的数据,包括原本私有的数据。

2501_90223218的博客 735

Java内部类和匿名内部类用法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

weixin_43946347的博客 182

Java 内部类基本用法

内部类我们从外面看是非常容易理解的,无非就是在一个类的内部在定义一个类。

developerFBI的专栏 821

Java内部类用法

内部类可以是静态(static)的,可以使用 public、protected 和 private 访问控制符,而外部类只能使用 public,或者默认。 成员内部类 在外部类内部直接定义(不在方法内部或代码块内部)的类就是成员内部类,它可以直接使用外部类的所有变量和方法,即使是 private 的。外部类要想访问内部类成员变量和方法,则需要通过内部类的对象来获取。 1 publ...

weixin_30329623的博客 87

JAVA普通内部类用法

JAVA普通内部类用法   内部类顾名思义就是定义在一个类的内部   内部类又有普通内部类、方法和域内的内部类、匿名内部类、嵌套内部类 普通内部类的基础用法 1 class MyClass{ 2 class InnerClass1{ 3 public InnerClass1() { 4 S...

三分自留地 301

java中inner的用法_Java——内部类(inner class)

packagecy.内部类.静态内部类;public classStaticOuter {private static String name = "Outer";private int age = 10;public static classStaticInner {@SuppressWarnings("unused")private static String name = "Inner";p...

weixin_39616477的博客 1577

HMC5883L Example_HMC5883_arduino_Tested_

Arduino HMC5883L Tested Sample on Proteus

相控阵天线阵列的密度加权matlab程序代码.zip

相控阵天线阵列的密度加权matlab程序代码.zip

上一篇: Linux 添加新用户 可以使用自己密码执行 sudo
下一篇: lucene中用到的常用算法
eric509
博客等级 码龄19年 8粉丝 170原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值