java基础(6)---类的高级特性

一:java类包

    1.因为类名容易冲突的问题,引入了包

    2.类的完整路径应该是 包名.类名,如java.lang.Math。java.lang是包名字,Math是类名。

    3.创建包:涉及eclipse的使用,省略。。。

    4.在java中包名的涉及应该与文件系统结构对应,如包名com.lzw,那么该包中的类,应该位于lzw子文件夹下。没有定义包的类会被归纳在默认包中。

    5.在类中定义包名的语法:package 包名,必须放在第一行

    6.为了避免包冲突,java中使用创建者的internet域名的反序。

    7.导入包:import 包名(或包中的类,或者包中的静态成员)


二:final变量

    1.final定义的变量为常量,不能再更改。final double PI = 3.14;

    2.被final定义的变量并不是恒定不变的,如:在类中定义一个final int x = rand.nextInt();将随机数赋值给他。那么每次实例化对象,每个对象中的x变量不一样。

    3.要想每个对象中的x一样,那就在前面加一个static

    

三:final方法

    1.定义为final方法的类,该子类不能重写这个方法。

    2.父类中定义了一个private final x()方法。在子类中也可以定义一个x()方法。但是这不是正常的重写。因为正常的重写情况下,子类向上转型,调用该方法,会调用到子类的方法,但是如果定义了private final,调用该x方法,就会报错。


四:final类

    1.定义为final的类不能被继承。


五:内部类

    1.成员内部类,类中定义的类。

        (1)内部类可以访问该类中的所有成员,包括private声明的。外部类不能直接访问内部类的成员。但可以通过内部类对象访问。

        (2)内部类的实例化,必须建立在外部类的实例化之上(先实例化外部类,才能根据外部类实例出内部类)

                例:内部类:o1,外部类o2

                o2 oo2 = new o2();

                o2.o1 = oo2.new o1();

    2.局部内部类,在方法或者某作用域范围内中定义的类。

        (1)在方法/某作用域的外部不能访问这个内部类,该内部类能访问外部的成员。

        (2)在方法体中定义的内部类只能访问方法体重定义为final的方法体成员。

    3.匿名内部类

            (1)匿名内部类没有名称

            (2)例:某方法放回值为某接口的对象,但是接口没有对象,需要靠内部类转型。

                    所以在该方法中必须返回一个内部类。

                    但是没有定义内部类,那么可以使用匿名内部类。具体使用案例如:

                        public OutInterface2 doit(){     //该方法返回值是一个名字为OutInterface2 的接口对象

                            return new OutInterface2{   //直接return ,然后new一个该接口,后面大括号中为该内部类的类体。

                                private int i = 0;

                                public int getValue(){     

                                    return i ;

                                }

                            };                                    //return 后记得加分号;

                        }

                (3)匿名内部类在编译后,会产生以“外部类名$序号”为名称的.class文件。序号1-n排列。

    4.静态内部类

           (1)在内部类前面添加修饰符static这个内部类就变成了静态内部类了

            (2)静态内部类可以声明static成员。非静态内部类中不能声明static成员。

            (3)如果要创建静态内部类对象,那么不需要外部类的对象,也能创建。

            (4)不能再静态内部类中访问外部类的非静态成员。

            (5)静态内部类的使用:在经常程序测试的时候,如果在每一个Java文件中都设置main方法,那将出现很多额外的代码,二程序并需要这么多的main方法。为了解决这个问题马呢么可以将main方法写入静态内部类中。

            (6)编译后,静态内部类会生成一个名词为   外部类类名$内部类类名    的.class文件,那么只要我们

    运行 java 外部类类名$内部类类名  就可以运行该静态内部类中主方法的内容。完成这个main方法的测试。

     当测试完所有的程序,需要打包的时候,只需要删除这个 外部类类名$内部类类名  的类就可以打包了。


    5.内部类的继承

        内部类可以像其他类一样可以被继承。只是有专门的继承的规定。

        例:public class OutputInnerClass extends ClassA.ClassB{

                    public OutputInnerClass(ClassA a){    //必须定义一个带参数的构造方法,并且参数必须是内部类的外部类对象

                        a.super();            //该构造方法中必须使用a.super();

                    }

            }

        

猜你喜欢

转载自blog.csdn.net/qq1319713925/article/details/79561002
今日推荐