一 定义:放在一个类的内部的类我们就叫内部类。
二、 作用
1.内部类可以很好的实现隐藏
一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
2.内部类拥有外围类的所有元素的访问权限
3.可是实现多重继承
4.可以避免修改接口而实现同一个类中两种同名方法的调用。
三、 例子
1 实现隐藏
package cn.com.common.innerClass.demo1; public interface Incrementable { void increment(); }
package cn.com.common.innerClass.demo1; public class Example { private class InsideClass implements Incrementable { @Override public void increment() { System.out.println("这是一个测试"); } } public Incrementable getIn() { return new InsideClass(); } }
package cn.com.common.innerClass.demo1; /** * * @ClassName: TestExample * @Description:实现隐藏 * 平时我们对类的访问权限,都是通过类前面的访问修饰符来限制的,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以,所以我们能通过内部类来隐藏我们的信息。 * 可以看下面的例子 * @author linsky328 * @date 2017年6月29日 下午4:26:48 * */ public class TestExample { public static void main(String args[]) { Example a=new Example(); Incrementable a1=a.getIn(); a1.increment(); } }
2 可以无条件地访问外围类的所有元素
package cn.com.common.innerClass.demo2; /** * * @ClassName: TagBean * @Description:可以无条件地访问外围类的所有元素 * @author linsky328 * @date 2017年6月29日 下午4:38:59 * */ public class TagBean { private String name = "linsky328"; 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(); } }
3 可以实现多重继承
package cn.com.common.innerClass.demo3; /** * * @ClassName: MainExample * @Description:里面分别实现了两个内部类 test1,和test2 ,test1类又继承了Example1,test2继承了Example2, * 这样我们的类三MainExample就拥有了Example1和Example2的方法和属性,也就间接地实现了多继承 * @author linsky328 * @date 2017年6月29日 下午4:44:08 * */ 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()); } }
/**
*
* @ClassName: Example1
* @Description:
* @author linsky328
* @date 2017年6月29日 下午4:41:14
*
*/
public class Example1 {
public String name()
{
return "linsky1";
}
}
public class Example2 {
public int age() {
return 25;
}
}
4 四、 避免修改接口而实现同一个类中两种同名方法的调用。
大家假想一下如果,你的类要继承一个类,还要实现一个接口,可是你发觉你继承的类和接口里面有两个同名的方法怎么办?你怎么区分它们??这就需要我们的内部类了。看下面的代码
接口
package insidecategory;
public interface Incrementable
{
void increment();
}
类 MyIncrement
package insidecategory;
public class MyIncrement {
public void increment()
{
System.out.println("Other increment()");
}
static void f(MyIncrement f)
{
f.increment();
}
}
大家看上面加黑的部分,两个方法都是一样的。在看下面这个类要继承这两个类
如果不用内部类
package insidecategory;
public class Callee2 extends MyIncrement implements Incrementable
{
public void increment()
{
//代码
}
}
想问一下大家increment()这个方法是属于覆盖MyIncrement这里的方法呢?还是Incrementable这里的方法。我怎么能调到MyIncrement这里的方法?显然这是不好区分的。而我们如果用内部类就很好解决这一问题了。看下面代码
package insidecategory;
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();
}
}
我们可以用内部类来实现接口,这样就不会与外围类的方法冲突了。
以下举例说明怎么使用:
Student类有个叫School的内部类(非静态)
Student stu = new Student();
stu.School sch = new stu.School();
sch就是School的一个对象。
假如School是内部静态类:
Student.School sch = new Student.School();
相关推荐
在这个"java内部类使用例子"中,我们将深入探讨这些类型,并通过实际代码来理解它们的工作原理。 首先,成员内部类是在外部类的成员位置定义的类,它可以访问外部类的所有成员,包括私有成员。成员内部类的实例与...
Java内部类是Java语言提供的一种独特机制,它允许在一个类的内部定义另一个类。这种设计模式使得代码结构更紧凑,可以更好地封装和隐藏实现细节,同时也增强了代码的复用性。内部类分为几种类型,包括成员内部类、...
4. 匿名内部类:匿名内部类是指没有名字的内部类,通常用在创建实例时使用。 为什么需要内部类? 内部类提供了某种进入其外围类的窗口。使用内部类最吸引人的原因是,每个内部类都能独立地继承自一个(接口的)...
Java内部类是Java语言的一个特色特性,它允许我们在一个类的内部定义另一个类。这种设计模式在处理一些特定情况时非常有用,例如实现匿名回调、封装特定逻辑或创建与外部类有紧密关系的类。本篇文章将深入探讨Java...
### Java内部类总结 在Java编程语言中,内部类是一个重要的概念,它允许开发者在一个类的内部定义另一个类。这种特性极大地增强了代码的封装性和复用性,同时也为解决特定问题提供了灵活的方法。本文将围绕Java内部...
文章目录Java内部类:你真得了解方法内部类吗?普通内部类方法内部类匿名内部类静态内部类参考Thinking in Java Java内部类:你真得了解方法内部类吗? java内部类,相信很多人都使用过内部类,新建线程使用的匿名...
Java 内部类详解 Java 内部类是一种高级特性,允许在一个类的定义内部创建另一个类。这种设计模式提供了更灵活的代码组织方式,同时还可以实现特定的封装和访问控制。内部类主要分为四种类型:静态内部类、成员内部...
### Java内部类详解 #### 一、内部类的分类与概念 Java的内部类机制是其强大特性之一,它允许类作为另一个类的成员存在,从而增强了代码的封装性和复用性。根据定义和作用域的不同,Java内部类主要分为四类: 1. ...
Java内部类详解 Java内部类是Java语言中的一种特殊类别,它是指定义在另外一个类内部的类。内部类可以访问外部类的所有成员变量和方法,包括私有的变量和方法。内部类可以分为四种:成员内部类、静态嵌套类、方法...
- 静态内部类:使用static修饰,不需要依赖外部类的实例即可创建。 2. 内部类的访问规则 内部类可以访问外部类的成员变量和方法,但是外部类访问内部类的成员变量和方法,需要通过内部类的实例进行。内部类持有外部...
本篇文章将深入探讨Java匿名内部类的使用规范,帮助你更好地理解和应用这一特性。 首先,理解匿名内部类的基本概念。匿名内部类没有名字,它不能被其他类直接引用,但可以作为局部变量、成员变量或者方法参数。它...
### Java内部类的应用场景 #### 场景一:当某个类除了它的外部类,不再被其他的类使用时 内部类的使用场景之一是当某个类仅需被其外部类使用时。这种情况下,将此类定义为内部类可以提高代码的封装性和可维护性。 ...
Java内部类是Java语言的一个独特特性,它允许我们在一个类的内部定义另一个类。这种设计提供了更高级别的封装和组织代码的方式。以下是关于内部类及其相关知识点的详细说明: 1. **内部类基本语法** - **实例内部...
(一) 成员内部类: 成员内部类就像外围类的成员变量一样,可以声明为public、protected、private等访问修饰符。成员内部类可以直接访问外围类的所有成员,包括私有成员,无需使用this关键字。但是,创建成员内部类的...
Java内部类是Java语言中一个独特且强大的特性,它允许我们在一个类的内部定义另一个类。内部类提供了增强封装的能力,使得内部类可以被隐藏在外部类中,仅对外部类可见,从而增加了代码的隐私性和安全性。同时,内部...
3. 匿名内部类:没有名字的内部类,通常用作接口的匿名实现或创建一次性使用的类。 4. 静态内部类:与成员内部类类似,但可以独立于外部类实例存在,且不隐式持有外部类的引用。 内部类可以访问外部类的所有成员,...
Java内部类是Java语言中一个独特且强大的特性,它允许我们在一个类的内部定义另一个类。内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态...
以上四个例子分别展示了Java内部类的四种类型及其使用场景。在实际编程中,根据需求选择合适的内部类类型可以提高代码的可读性和可维护性。通过理解这些内部类的差异和用法,开发者能够更好地利用Java的这一特性来...
以上是Java内部类的基础知识,实际的PDF文档可能会深入探讨这些概念,提供示例代码以及更具体的使用场景。学习和理解Java内部类有助于提升代码的灵活性和可维护性,尤其是在处理复杂的面向对象设计时。