Day009
重点
final 修饰的变量只能赋一次值(万变不离其宗)
当final修饰实例变量。
实例变量
如果没有手动赋值,系统会赋默认值
final 修饰的实例变量 系统不管赋默认值,要求程序员必须手动赋值
这个手动赋值,在变量后面直接赋可以,在构造方法中赋值也可以
实例变量默认值是在构造方法的执行中赋值(new的时候)
-
实例变量既然使用了final修饰了,说明实例变量值不会随着对象的变化而变化】
该实例变量前面应该添加 static关键字,变为静态的,存储在方法区。
最终结论
static final 联合修饰的变量 称为常量
常量名建议全部大写,每个单词之间采用下划线衔接
常量:实际上常量和静态变量是一样的,区别在于:
常量的值不能变。
常量和静态变量,都是存储在方法区,并且都是在类加载时初始化。
final关键字 修饰的东西都不能变
-
final 修饰的类无法继承
-
final修饰的方法无法覆盖
-
final修饰的变量只能赋一次值
-
final修饰的引用一旦指向某个对象,则不能再重新指向其他对象,但是该引用指向的对象内部的数据是可以修改的、
-
final修饰的实例变量必须手动初始化,不能采用系统默认值
-
final修饰的实例变量一般和是static联合使用,称为常量
常量 一般全部大写命名
抽象类和接口以及抽象类和接口的结论
抽象类
抽象类无法实例化,没法创建对象
抽象类是:类与类之间有共同特征,再进一步抽象形成抽象类。由于类本身是不存在的,所以抽象类无法创建对象。

-
抽象类也属于引用数据类型
语法
【修饰符列表】abstract class 类名{
类体
}
抽象类
抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的
抽象类的子类还可以是抽象类
抽象类无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的
//银行类
public abstract class
final 和abstract 不能联合使用 矛盾】
抽象类关联到一个抽象方法。
抽象方法表示 :没有方法体的方法
例如:
public abstract void dosome();
特点:没有方法体,以分好结尾
前面的修饰符列表中有abstract关键字
抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中。
重要结论
一个非抽象类继承抽象类,必须将抽象类中的抽象方法实现了
这是java语法上强行规定的,必须的,不然编译器就报错了
这里的覆盖或者说重写,或者叫做实现

抽象类
定义 class前加abstract
能用多态就用多态
父类型引用指向子类型对象

面试题
java语言中凡是没有方法体的方法都是抽象方法、 不对×
object类中就有很多方法没有方法体,都是以”;“结尾,但他们都不是抽象方法
例如:
public native int hashCode();
这个方法底层调用了c++写的动态链接库程序
前面修饰符列表没有abstract 有一个native 表示调用的jvm本地程序
接口 interface
基础语法
-
接口也是一种引用数据类型,编译之后也是一个class字节码文件
-
接口是完全抽象的(抽象类是半抽象)或者说接口也是特殊的抽象类
-
接口定义 :
【修饰符列表】 interface 接口名{}
-
接口支持多继承,一个接口可以继承多个接口
-
接口里只包含常量+抽象方法,
-
接口中所有元素都是public修饰的(公开的)
-
接口中的抽象方法定义时,public abstract 修饰符可以省略
-
接口中的方法都是抽象方法,所以接口中的方法不能有方法体
-
接口中的常量,public static final 修饰符也可以省略
类与类之间叫做继承,类与接口之间叫做实现
可以把实现看做继承
继承 使用extends关键字
实现使用implements关键字
-
(重要)当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现。
一个类,可以实现多个接口。其实就类似于多继承。
接口之间是支持多继承的
-
一个类可以同时实现多个接口
继承和实现都存在的话,
class Cat extends Animal implements Flyable{
public void fly(){
System.out.println(“肥猫”);
}
}
先extend object 然后 implements
-
extends 和implements 可以共存,extends在前
-
使用接口时,写代码的时候,可以使用多态:父类引用指向子类型对象
接口在开发中的作用
注意:接口在开发中的作用,类似于多态在开发中的作用
多态:面向对象编程,不要面向具体编程,降低程序的耦合度,提高程序的拓展力。

接口在开发中的作用
接口是完全面向对象的;有了接口:可插拔,拓展力强
接口是抽象的概念
-
Cat is a Animal 但凡满足is a 的表示 可以设置为继承
-
Customer has a FoodMenu 但凡是满足 has a 的表示都以属性的形式存在
总结一句话:面向接口编程,可以降低程序的耦合度,提高程序的扩展力,符合OCP开发原则
接口的使用离不开对态机制(接口+多态才可以达到降低耦合度)
接口可以解耦合,解开的是调用者和实现者的
调用者面向接口调用,实现者面向接口编写实现;
以后进行大项目开发,一般都是分离成一个一个模块。模块之间采用接口衔接。降低耦合度
三个字:解耦合!!
is a \has a \like a
类型与类型之间的关系

抽象类和接口的区别
语法上的区别:
至于以后抽象类与接口的选择,通过项目中开发中体验学习
抽象类是半抽象的
接口是完全抽象的
抽象类 中有构造方法
接口中没有构造方法
接口和接口之间支持多继承
类与类之间只支持单继承
一个类可以同时实现多个接口
一个抽象类只能继承一个类(单继承)
接口中只能出现常量和抽象方法
以后接口使用的比抽象类多 ;一般抽象类使用的还是少。
好起来了。奥利给!!!1
浙公网安备 33010602011771号