本文共 5263 字,大约阅读时间需要 17 分钟。
6.源文件声明规则
1)一个源文件中只能有一个public类
2)一个源文件可以有多个非public类 3)源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java 4)如果一个类定义在某个包中,那么package语句应该在源文件的首行 5)如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面
7.在Java中,如果给出一个完整的限定名,包括包名、类名,那么Java编译器就可以很容易地定位到源代码或者类。Import语句就是用来提供一个合理的路径,使得编译器可以找到某个类
8.内部类:
1)成员内部类 2)局部内部类 3)匿名内部类(1)匿名内部类没有名字,因此只能使用一次,下次再使用重新创建对象
(2)匿名内部类的适用情形:某个类不是经常使用,如只使用一次,使用完后不保存该实例的对象,为了便于代码的编写常采用匿名内部类 (3)使用匿名内部类的前提条件:必须继承一个父类或实现一个接口 (4)匿名内部类不能有构造方法。 (因为匿名内部类是没有类名的) (5)其他说明: 无论是匿名内部类、接口或者抽象类,都不能实例化 但我们常用到的new 一个匿名内部类、接口或者抽象类实际上是执行3步的合并,即: a.先定义一个子类,让该子类继承上述接口或实现上述抽象类; b.然后new一个该子类的对象; c.将该子类的一个引用赋值给接口或者抽象类变量(它是依据java多态特性:父类指向子类的引用)。 (6) interface Animal, Animal a = new Animal(){ 实现接口的方法 } 匿名类其实就是相当于实现接口或者实现抽象类的一个具体类,以及不是抽象类或者接口,所以可以实例化,在匿名内部类中必须实现抽象方法,或者接口的方法,否则就会报错的,就是让匿名类变成可以实例化的类
4)静态内部类
9.抽象类——不能实例化
1)抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样
2)由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。 3)如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法 4)如果一个类包含抽象方法,那么该类必须是抽象类 5)任何子类必须重写父类的所有抽象方法,或者声明自身为抽象类 6)继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象 7)抽象类不能被实例化,如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象 8)抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。 9)抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能 10)构造方法,类方法(用static修饰的方法)不能声明为抽象方法 11)抽象类可以有非抽象方法,也可以没有抽象方法
访问父类被隐藏的成员变量,如:super.variable;
调用父类中被重写的方法,如:super.Method([paramlist]),super()调用父类构造方法; 调用父类的构造函数,如:super([paramlist]);
1)super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
2)this关键字:指向自己的引用。
(1) 当调用a.eat()时,编译器在编译时会在Animal 类中找到 eat(),执行过程 JVM 就调用 Cat 类的 eat() (2) 因为a是 Animal 的引用,所以调用 e 的 eat() 方法时,编译器会去 Animal 类查找 eat() 方法 (3)在编译的时候,编译器使用 Animal 类中的 eat() 方法验证该语句,但是在运行的时候,Java虚拟机(JVM)调用的是 Cat类中的 eat()方法
1)接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
2)接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误 3)接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法
1)抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行
2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的 3)接口中不能有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法 4)一个类只能继承一个抽象类,而一个类却可以实现多个接口
1)接口不能用于实例化对象
2)接口没有构造方法 3)接口中所有的方法必须是抽象方法 4)接口不能包含成员变量,除了 static 和 final 变量 5)接口不是被类继承了,而是要被类实现 6)接口支持多重继承
1)类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常
2)类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型 3)如果实现接口的类是抽象类,那么就没必要实现该接口的方法
1) 若一个普通类实现了接口,那么,该普通类必须实现接口中所有的抽象方法。
2) 若一个抽象类实现了接口,那么,该抽象类可以实现接口中的抽象方法,也可以不实现。 3) 若一个普通的子类继承了抽象父类,该抽象的父类又实现了接口,那么,该普通的子类必须得重写,抽象父类中所有的抽象方法,并且,还必须得实现抽象的父类尚未实现的抽象方法
1)包名成为类名的一部分,正如我们前面讨论的一样
2)包名必须与相应的字节码所在的目录结构相吻合
注:文章是经过参考其他的文章然后自己整理出来的,有可能是小部分参考,也有可能是大部分参考,但绝对不是直接转载,觉得侵权了我会删,我只是把这个用于自己的笔记,顺便整理下知识的同时,能帮到一部分人。 ps : 有错误的还望各位大佬指正,小弟不胜感激