内部类 java是什么东西(Java 静态内部类作用)
很多朋友对于内部类 java是什么东西和Java 静态内部类作用不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
java中内部类的概念
简单的说,内部(inner)类指那些类定义代码被置于其它类定义中的类;而对于一般的、类定义代码不嵌套在其它类定义中的类,称为顶层(top-level)类。对于一个内部类,包含其定义代码的类称为它的外部(outer)类。 1 Static member class(静态成员类)类声明中包含“static”关键字的内部类。如以下示例代码, Inner1/Inner2/Inner3/Inner4就是Outer的四个静态成员类。静态成员类的使用方式与一般顶层类的使用方式基本相同。
1内部类的嵌套可以理解成类的链关系,在构造一个内部类(非static)的实例的时候,会将直接外层类的实例
作为参数传进构造函数,而外层类的实例也是用其外层类的实例构造,所以是一种链状关系,内部的类可以使用所有
外层的类的实例,而外层的类不能使用内层的类,应用a.this(最外层类实例),a.b.c.this(链中某个外层的实例)。
class TheOuter{
class kk{
class gg{
int tt= 100;
}
}
class aa{
class bb{
int jj= 10;
class cc{
{ int ff= TheOuter.aa.bb.this.jj;
//无法直接访问到gg不在链关系内
System.out.println(ff);
}
}
}
}
}
2创建一个内部类 new aa().new bb().new()cc实际上是调用外层类实例.new本层构造函数()
如果内部类是static的不需要外层类的实例多个static嵌套的内部类的实例 aa.bb.cc test= new aa.bb.cc();
3
class a0{
class b0{
}
}
class vvv{
class ff extends a0.b0{// ff这里不是内部类也行
ff(a0 kk){
kk.super();
}
}
}
继承自内部类要调用父类的外层类的super()
4
class dd{
void print(){
System.out.println("dd.println is there");
}
class kk{
kk(int i){}
class cc{
void pp(){
System.out.println("****");
}
void ddpp(){
dd.this.print();
}
}
}
}
class aa{
public static void main(String agrs[]){
dd.kk.cc test= new dd().new kk(10).new cc();
test.ddpp();
}
}
在类内部可以是使用外层类,但是如果生成一个实例的句柄就没有提供访问上层类的功能。
5 this是指本类的实例
6缺省的new
class cc{
{
new test();
}
class kk{
{
System.out.println("there kk");
}
}
class test{
{
new kk();
}
class kk{
{
System.out.println("there test_kk");
}
}
}
}
可以直接使用new,new的范围可以是之际外层.this.new和this.new但是如果内层与外层出现同名类以内部优先
7
//当有链关系的时候要注意类不要重名
class vv{
class bb{}//!
class kk{
//class vv{}这样就会出错
class bb{}//!这样就不会出错
}
}
8
class a0{
class b0{
}
}
class vvv{
class ff extends a0.b0{//不是内部类也行
ff(a0 kk){
kk.super();
}
}
}
继承自内部类要调用父类的外层类的super()
9匿名内部类
interface oo{
//oo(int g){}
int k= 10;
void pt();
}
class pp{
pp(int g){
}
int get(){
return 100;
}
}
class me{
/*
interface oo{
void pt();
}
*/
class kk{
oo testmed(){
final int i= 10;
int g= 100;
return new oo(){
int kk;
{
//使用外面的东西要声名成final
//继承接口内部优先
//匿名内部类没有构造函数,只能使用块,初始化
kk= i+ k;
}
public void pt(){
System.out.println(kk);
}
};
}
pp testmed0(){
return new pp(10){//继承自类
public int get(){
return super.get()* 10;
}
};
}
}
}
匿名内部类可以继承自接口也可以继承自类,继承自类的构造函数中可以有参数。
10
class bf{
interface kk{}
class aa{
//接口能嵌套在接口中(不受限制),或者嵌套在顶层,下面就不行
//interface gg{}
}
}
什么是内部类内部类有什么作用(java)
(1)、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。(2)、内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。(3)、内部类声明成静态的,就不能随便的访问外部类的成员变量,仍然是只能访问外部类的静态成员变量。典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。使用内部类最吸引人的原因是:每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。
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是什么东西和Java 静态内部类作用的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。