Java编程思想学习笔记——第十章 内部类

第十章 内部类

可以将一个类的定义放在另一个类的定义内部,这就是内部类。

10.3使用.this与.new

练习4:在Sequence.SequenceSelector类中增加一个方法,它可以生成对外部类Sequence的引用。

/**

* 作者:LKP

* 时间:2018/8/24

*/

public class Sequence {

    class SequenceSelector{

        public Sequence getSequence(){

            return Sequence.this;

        }

    }

}

 

 

练习5:创建一个包含内部类的类,在另一个独立的类中,创建此内部类的实例。

/**
 * 作者:LKP
 * 时间:2018/8/24
 */
public class PracticeDemo {
    public static void main(String[] args){
        Practice p = new Practice();
        Practice.PracticeSequence ps = p.new PracticeSequence();
        ps.show();
    }
}
 
class Practice{
    public class PracticeSequence{
        public void show(){
            System.out.println("我是内部类!");
        }
    }
 
}

10.4内部类与向上转型

练习6:(2)在第一个包中创建一个至少有一个方法的接口。然后在第二个包内创建一个类,在其中增加一个protected的内部类以实现那个接口。在第三个包中,继承这个类,并在一个方法中返回该protected内部类的对象,再返回的时候向上转型为第一个包中的借口和类型。

第一个包:

/**
 * 作者:LKP
 * 时间:2018/8/25
 */
public interface Practice6_1 {
    int show();
}

第二个包:

/**
 * 作者:LKP
 * 时间:2018/8/25
 */
public class Practice6_2 {
    public class Pra6_2 implements Practice6_1{
 
        @Override
        public int show() {
            return 0;
        }
    }
}

第三个包:

/**
 * 作者:LKP
 * 时间:2018/8/25
 */
public class Practice6_3 extends Practice6_2 {
    public static void main(String[] args){
        Practice6_3 p = new Practice6_3();
        Practice6_1 pra = p.getPra();
        System.out.println(pra.show());
   }
 
    public Practice6_1 getPra(){
        return new Pra6_2();
    }
}

10.8为什么需要内部类

即必须在一个类中以某种方式实现两个接口。由于借口的灵活性,你有两种选择:使用单一类,或者使用内部类。

如果使用内部类,还可以获得其他一些特性:

1.内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立。

2.在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或继承同一个类。

3.创建内部类对象的时刻并不依赖于外围类对象的创建。

4.内部类并没有令人疑惑的“is-a”关系;它就是为一个独立的实体。

 

    原文作者:孤独键客
    原文地址: https://blog.csdn.net/lkp1603645756/article/details/82429779
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞