首页 > 其他 > 详细

2018.1.9学习笔记

时间:2018-01-09 23:58:46      阅读:331      评论:0      收藏:0      [点我收藏+]

内部类:声明在类的内部的类,也叫嵌套类(Inner Class)。

 

作用:可以访问外部类的所有属性和方法,内部类通常用于外部类实现辅助功能。换句话说,内部类和外部类联系较为紧密。

 

为什么使用嵌套类呢?

1.嵌套类对象可以访问创建它的外部类的使用属性和方法。

2.嵌套类通过在其外部类环境内的紧耦合嵌套声明,不为同一包的其他类所见,可以支持更高的封装性。(权限访问:仅在本类中)

3.方便运行时回调。(??A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法

4.嵌套类编写事件时很方便。(应用于GUI)

 

嵌套类定义的语法:

public class OuterClass{

...

public/protected/private  static class NestedClass{

}

}

说明:

1.顶级类只能用公共的或默认的权限修饰符。(何为顶级类?外部类吗?当你在其它类的外面声明一个类时,Java就认为该类是一个顶级类。)

2.嵌套类和顶级类的区别在于,嵌套类分为静态类和非静态类两种。

 

 

内部类也是外部类成员的一种,与外部类的成员变量、成员方法并列。

 

/*内部类的使用*/

public class MemberInnerClassTest{

public static void main(String[] args) {

Outer outer=new Outer();

outer.test();

outer.accessInner();

//外部类以外创建内部类的对象

Outer.Inner inner=outer.new Inner();

inner.display();

}

}

 

class Outer{

private int outer_i=100;

private int j=123;

public void test(){

System.out.println("Outer:test()");

}

 

public void accessInner(){

//外部类中使用内部类也需要创建出它的对象

Inner inner=new Inner();

inner.display();

}

 

 

public class Inner{

private int inner_i=100;

private int j=789;

//内部类中定义的这个属性与外部内的属性同名

public void display(){

//内部类中可直接访问外部类的方法

    System.out.println("Inner:outer_i="+outer_i);

    test();

    //内部类可以直接访问内部类的方法

    //内部类可以用this来访问自己的成员

    System.out.println("Inner:inner_i="+this.inner_i);

    System.out.println(j);

    //访问的是内部类中定义的同名成员,因为有个this

    /*通过“外部类.this.成员名”可以访问内部类中定义的同名成员,

    有点不理解,this不是指向自身吗?它是指代当前对象,Outer用this指向内部类的变量j,就近原则*/

 

    System.out.println(Outer.this.j);

 

}

}

 

}

 

 

 

this关键字

1.在类的方法定义中使用的this代表使用该方法的对象的引用。

2.当必须指出当前使用方法的对象是谁时要使用this。

3.有时使用this可以处理方法中成员变量和参数重名的情况。

4.this可以看作是一个变量,它的值是当前对象的引用

 

public class Leaf{

int i=0;

Leaf(int i){

this.i=i;

//后面的i是参数i,当前对象,this.i中的i是成员变量i

Leaf increament(){

i++;

return this;

//返回自身

}

void print(){

System.out.println("i="+i);

}

public static void main(String[] args) {

Leaf leaf=new Leaf(100);

/*Leaf构造方法中的参数i为100向成员变量中的i赋值;

对象leaf与类Leaf中的参数100指向堆内存中的成员变量i并赋值,

但是好像成员变量应该在栈内存啊??栈内存指向堆内存,引用对象指向本体类?!*/

Leaf.increament().increament().print();

}

}

}

 

 

 

还有特殊的内部类

1.局部内部类

局部内部类是在方法体内声明的类,像是局部变量一样,只在它的代码块内可见。但它可以在运行时访问它所在的方法中的final参数和final局部变量。

 

2.匿名内部类

匿名内部类是没有声明名称的内部类。

public class OuterClass{

new 已存在的类名(){

}

}

       匿名内部类在声明时就直接创建出对象了,都是某个已存在类或接口的子类或具体的实现类。

 

3.静态嵌套类

用static修饰的嵌套类被称作为嵌套类。如果一个嵌套类用static修饰就相当于是在外部定义了一个类,即共享,静态嵌套类中可以声明static成员或非成员方法,但只能访问类中的静态成员。

 

 

 

 

2018.1.9学习笔记

原文:https://www.cnblogs.com/shijinglu2018/p/8254066.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!