final 最终修饰符 可以修饰 类 方法 变量(成员变量和局部变量)
修饰类 被修饰的类不能被继承
修饰方法 被修饰的方法不能被重写
修饰的变量 只能赋值一次 不可以再次赋值 是常量
注意事项:
1.final修饰引用类型变量 地址值不能改变 但属性值可以改变
2.final修饰成员变量 不能使用默认值 必须在创建对象之前赋值
两种赋值方式:
1.直接显示赋值
2.在构造方法中赋值
接口的概念
接口就是功能的集合 接口中定义的都是抽象方法
接口的定义格式
public interface 接口名{
抽象方法
}
接口的使用 类实现接口
1.接口不能创建对象
2.定义类实现接口 实现的动作类似于继承
public 实现类 implements 接口{
重写方法
}
3.重写接口中的抽象方法
4.创建实现类对象调用方法
接口的成员特点
1.接口没有构造方法
2.接口中的成员变量 默认被public static final修饰 是常量
3.接口中的成员方法 默认被public abstract修饰 都是抽象方法
接口的特点
1.类可以实现接口 既可以单实现 也可以多实现
2.类可以在继承一个类的同时 实现多个接口
3.接口与接口是继承关系 既可以单继承也可以多继承
接口与抽象类的区别
成员上的区别
成员变量
接口中的成员变量是常量
抽象类中的成员变量 既可以是常量 也可以是变量
构造方法
接口中没有构造方法
抽象类有构造方法 供子类使用
成员方法
接口的成员方法都是抽象的(JDK1.8之前)
抽象类的成员方法可以是抽象的 也可以是具体的
理念上的不同
抽象类 描述的是一类事物的共性内容
接口 描述的是 体现外的额外功能
接口中的默认方法 JDK1.8
public default 返回值类型 方法名(形参列表){
}实现类创建对象直接调用 实现类也可以对这个默认方法进行重写 也可以不重写
但是 如果实现类实现了多个接口 多个接口中有相同的默认方法 要求实现类必须重写
接口中的静态方法 JDK1.8
public static 返回值类型 方法名(形参列表){
}<br />注意:接口中的静态方法 并不是给实现类使用 而是接口自己调用的<br /> 实现类不能调用接口中的静态方法<br /> 接口.方法名(实际参数);
多态概念
一个事物不同时刻的多种形态,Jav作为面向对象语言描述了这种形态
最终体现为 父类引用指向子类对象
多态格式(必须有继承或者实现关系)
父类引用指向子类对象
具体类多态
父类 对象名=new 子类();
抽象类多态
抽象父类 对象名 =new 子类();
接口类多态
接口 对象名 =new 实现类();
多态后访问成员的特点
成员变量
编译时:到父类中去找有没有这个变量 如果有可以访问
如果没有则编译报错
运行时:运行的是父类成员变量的值
编译时:看左边 运行时:看左边<br /> <br /> 成员方法<br /> 编译时:到父类中有没有这个方法 如果有可以访问<br /> 如果父类中没有则编译报错<br /> 运行时:运行的是子类重写后的方法 如果子类不重写<br /> 运行的还是父类的方法<br /> 编译时:看左边 运行时:看右边<br /> 多态后 一切表现都是父类的表现 只有方法运行的是子类重写后的方法<br /> <br /> 向上转型(自动类型提升)<br /> int a=10;<br /> double b=a;<br /> 多态就是向上转型<br /> Zi zi =new Zi();<br /> Fu fz=zi;<br /> 向下转型(强制类型转换)<br /> double b=10.1;<br /> int a=(int)b;<br /> //多态后不能访问子类特有功能<br /> //如果想访问 需要向下转型<br /> Zi zi=(Zi)fz;<br />boolean b=对象 intanceof类型;<br />判断某个对象 是否属于某种类型 如果属于返回 true 不属于返回false
