java 为什么有内部类?java为什么要用内部类
今天给各位分享java 为什么有内部类的知识,其中也会对java为什么要用内部类进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
Java为什么要使用内部类
1.内部类提供进入其外围类的绿色通道;
2.一般来说,内部类继承自某个类或实现某个接口,和接口一起实现java中多重继承;
3.private内部类给类的设计者提供了一种途径,通过这种方式可以完全阻止任何依赖于类型的编码,并且完全隐藏了实现的细节;
4.匿名内部类可以使得代码更加地灵活。
Java 静态内部类作用
1、变值权限修饰作用,在定义内部类的时候,可以在其前面加上一个权限修饰符static。此时这个内部类就变为了静态内部类。
2、在某些特殊的情况下,少了这个静态内部类还真是不行。如在进行代码程序测试的时候,如果在每一个Java源文件中都设置一个主方法(主方法是某个应用程序的入口,必须具有),那么会出现很多额外的代码。
3、最主要的时这段主程序的代码对于Java文件来说,只是一个形式,其本身并不需要这种主方法。但是少了这个主方法又是万万不行的。在这种情况下,就可以将主方法写入到静态内部类中,从而不用为每个Java源文件都设置一个类似的主方法。
这对于代码测试是非常有用的。在一些中大型的应用程序开发中,则是一个常用的技术手段。
扩展资料例如:
对于两个类,拥有相同的方法:
class People{
run();
}
interface Machine{
run();
}
此时有一个robot类:
class Robot extends People implement Machine.
此时run()不可直接实现。
interface Machine{
void run();
}
class Person{
void run(){
System.out.println("run");
}
}
class Robot extends Person{
private class MachineHeart implements Machine{
public void run(){
System.out.println("heart run");
}
}
public void run(){
System.out.println("Robot run");
}
Machine.getMachine(){returnnew MachineHeart();
}
class Test{
publicstaticvoid main(String[] args){
Robot robot=new Robot();
Machine m=robot.getMachine();
m.run();
robot.run();
}
}
参考资料来源:百度百科-静态内部类
java为什么要用内部类
1.内部类能访问外围类的所有成员,包括私有成员。
当生成一个内部类对象时,此对象与制造它的外围类对象之间就有了一种联系,所以它能访问其外围类对象的所有成员,而不需要任何特殊的条件。如下面代码所示:
[java]view plaincopy
classOutterClass{
privateinti=1;
classInnerClass{
publicvoiddisplayPrivate(){
System.out.println(i);
}
}
}
publicclassMainClass{
publicstaticvoidmain(String[]args){
OutterClassoutter=newOutterClass();
OutterClass.InnerClassinner=outter.newInnerClass();
inner.displayPrivate();
}
}
由上面的代码可以看出,内部类能够访问外部类的私有成员变量。在这段代码中,还需要注意的是
①生成内部类对象,必须要先有外围类对象,具体的做法请见代码;
②内部类能访问外围类的私有成员这一点,C++中的嵌套类是没有这个特性的。
2.内部类与static
①内部类不能含有static方法;
②内部类不能含有static数据成员,除非是static final;
③内部类可以继承含有static成员的类。
3.匿名内部类
匿名内部类,看起来非常奇怪。因为它太简洁了,但这也带来一个好处,用匿名内部类写出来的代码通常比较简洁啦!
深入理解Java中为什么内部类可以访问外部类的成员
一般来说,外部类调用内部类的方法分为以下几种情况:
1.使用static可以声明一个内部类,可以直接在外部调用
//定义外部类
class Outer
{
//定义外部类的私有属性
private static String info="hello world";
//使用static定义内部类
static class Inner
{
//定义内部类的方法
public void print()
{
//直接访问外部类的私有属性
System.out.println(info);
}
}
//定义外部类的方法
public void fun()
{
//通过内部类的实例化对象调用方法
new Inner().print();
}
}
public class InnerClassDemo03
{
public static void main(String args[])
{
//通过Outer.Inner创建内部类的实例,并调用它的print方法
new Outer.Inner().print();
}
}
2.不使用statc声明一个内部类,使外部调用
//定义外部类
class Outer
{
//定义外部类的私有属性
private String info="hello world";
//定义内部类
class Inner
{
//定义内部类的方法
public void print()
{
//直接访问外部类的私有属性
System.out.println(info);
}
};
//定义外部类的方法
public void fun()
{
//通过内部类的实例化对象调用方法
new Inner().print();
}
};
public class InnerClassDemo04
{
public static void main(String args[])
{
//外部类实例化对象
Outer out= new Outer();
//实例化内部类对象
Outer.Inner in= out.new Inner();
//调用内部类的方法
in.print();
}
}
3.在方法中定义内部类,使外部调用
//定义外部类
class Outer
{
//定义外部类的私有属性
private String info="hello world";
//定义外部类的方法
public void fun(final int temp)
{
//在方法中定义的内部类
class Inner
{
//定义内部类的方法
public void print()
{
//直接访问外部类的私有属性
System.out.println("类中的属性:"+ info);
System.out.println("方法中的参数:"+ temp);
}
}
//通过内部类的实例化对象调用方法
new Inner().print();
}
}
public class InnerClassDemo05
{
public static void main(String args[]){
//调用外部类的方法
new Outer().fun(30);
}
}
java 为什么有内部类和java为什么要用内部类的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!