final
final可以修饰数据,方法,类
final修饰某个量的时候,这个量称之为常量---定义好之后不可改变---对于基本类型,指的是值不可变;对于引用类型,指的是地址不可变,但是其中的属性值可以改变
public class Demo {
private final int i;
public Demo(){ this(5); } public Demo(int i){ this.i = i; } }
Demo d = new Demo(5);
final修饰方法称之为最终方法---不可被重写--但是可以被继承,可以进行重载
final修饰类称之为最终类---不可被继承---最终类中的方法无法被重写
子类在继承父类的时候,哪些东西是在子类中不可见的?---private,代码块,构造函数
abstract抽象方法
如果所有的子类中存在了一些名称一致而细节不同的方法的时候,这个时候可以在父类中声明该行为,此时声明行为的时候不需要添加方法体,所以此时该方法就形成了抽象方法---abstract修饰---抽象方法所在的类一定是抽象类。
抽象类不能实例化/创建对象,但是有构造方法/函数
抽象类中可以有抽象方法也可以没有抽象方法。抽象类中可以定义一切的属性以及普通方法和静态方法。
抽象方法之间可以重载吗?---可以---重载只关心方法名和参数列表
抽象方法可以用static/final/private修饰吗?---不可以
如果一个抽象方法的权限修饰符是默认权限,对子类是否有要求?---要求父子类必须同包
最终类可以是抽象类吗?---不可以
接口
用interface来声明一个接口。---用implements来实现一个接口。类在实现接口之后需要实现接口中所有的抽象方法。
用implements关键字让类和接口之间产生练习,这种联系称之为实现。
接口中的方法默认是抽象方法而且只能是抽象方法(JDK1.7及其以前)。
单继承,多实现---一个类只能继承一个父类,但是可以实现多个接口---一旦出现了多实现,那就必不可免的可能会导致方法的混乱---针对的是类
interface A{ void m();// 默认是public修饰 } public class B implements A{ void m(){ // 接口中的方法默认是public修饰---重写 一大 原则 // 需要添加修饰符public System.out.println(“B m()”); } }
在Java中,接口可以继承接口,---接口之间是多继承
接口中不允许定义构造方法---虽然接口在编译完成之后会产生class文件,但是接口不是类
接口中的方法默认是抽象方法,接口中的量默认是静态常量---接口中可以定义属性,默认用public static final修饰
抽象类在实现接口之后一定要实现这个接口中的所有的抽象方法吗?---不一定
接口可以在一定程度上统一结构实现方法的统一调用,但是可能会导致代码的冗余
接口可以作为模板 --- 反射内部类
定义在类或者接口中的类就称之为内部类
方法内部类
定义在方法中的类--只能定义它的方法中使用;
方法内部类中不能定义静态属性和静态方法但是可以定义静态常量;
方法内部类可以使用外部类中的一切属性和方法,但是如果使用当前方法的数据的时候,要求这个数据是一个常量
外部类$数字内部类.class
成员内部类
定义在类内方法外的类
静态内部类
用static修饰的内部类
匿名内部类
匿名内部类本质上是继承了对应的类或者是实现了对应的接口---只要一个类可以被继承,那么这个类就可以出现匿名内部类的形式。
如果匿名内部类定义到了方法中,此时匿名内部类的使用规则和方法内部类一致
如果匿名内部类定义到了类中,此时匿名内部类的使用规则和成员内部类一致、
扩展:内部接口----定义在类或者接口中的接口----类中的接口默认是静态的,接口中的类或者接口都是用static修饰的
包
声明包用的package---一个Java文件中只允许存在一个package语句,而且这个package语句必须放在整个Java文件的首行
package 包名;
import---导包语句
import java.util.*---表示导入util包下的所有的类但是不包括子包下的类--- *是一个通配符
java.lang---核心类库---一个Java程序运行之前会先自动的把这个包下的所有的类加载到了方法区---在使用的时候不需要导包
java.util---工具包---存放了一系列简化操作的工具类
java.io---数据传输
java.net---网络传输
java.math---数学运算
java.sql---数据库
java.awt---图形用户界面---几乎不用
java.security---数据安全
java.text---格式化
javax.*---扩展包
org.*---第三方厂商和开源社区提供的包
注意:包名不能以java,javax,org开头