Day009

final

重点

final 修饰的变量只能赋一次值(万变不离其宗)

当final修饰实例变量。

实例变量

如果没有手动赋值,系统会赋默认值

final 修饰的实例变量 系统不管赋默认值,要求程序员必须手动赋值

这个手动赋值,在变量后面直接赋可以,在构造方法中赋值也可以

 

实例变量默认值是在构造方法的执行中赋值(new的时候)

 

  • 实例变量既然使用了final修饰了,说明实例变量值不会随着对象的变化而变化】

该实例变量前面应该添加 static关键字,变为静态的,存储在方法区。

 

最终结论

static final 联合修饰的变量 称为常量

常量名建议全部大写,每个单词之间采用下划线衔接

 

常量:实际上常量和静态变量是一样的,区别在于:

常量的值不能变。

常量和静态变量,都是存储在方法区,并且都是在类加载时初始化。

final关键字 修饰的东西都不能变

  • final 修饰的类无法继承

  • final修饰的方法无法覆盖

  • final修饰的变量只能赋一次值

  • final修饰的引用一旦指向某个对象,则不能再重新指向其他对象,但是该引用指向的对象内部的数据是可以修改的、

  • final修饰的实例变量必须手动初始化,不能采用系统默认值

  • final修饰的实例变量一般和是static联合使用,称为常量

    常量 一般全部大写命名

 

抽象类和接口以及抽象类和接口的结论

抽象类

抽象类无法实例化,没法创建对象

抽象类是:类与类之间有共同特征,再进一步抽象形成抽象类。由于类本身是不存在的,所以抽象类无法创建对象。

 

image-20210419162608699

  • 抽象类也属于引用数据类型

语法

【修饰符列表】abstract class 类名{

类体

}

抽象类

抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的

抽象类的子类还可以是抽象类

抽象类无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的

 

//银行类
public abstract class
   

final 和abstract 不能联合使用 矛盾】

抽象类关联到一个抽象方法。

抽象方法表示 :没有方法体的方法

例如:

public abstract void dosome();

特点:没有方法体,以分好结尾

前面的修饰符列表中有abstract关键字

抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中。

重要结论

一个非抽象类继承抽象类,必须将抽象类中的抽象方法实现了

这是java语法上强行规定的,必须的,不然编译器就报错了

这里的覆盖或者说重写,或者叫做实现

 

image-20210419170005125

抽象类

定义 class前加abstract

能用多态就用多态

父类型引用指向子类型对象

image-20210419172439882

面试题

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在前

  • 使用接口时,写代码的时候,可以使用多态:父类引用指向子类型对象

接口在开发中的作用

注意:接口在开发中的作用,类似于多态在开发中的作用

多态:面向对象编程,不要面向具体编程,降低程序的耦合度,提高程序的拓展力。

image-20210420210727379

接口在开发中的作用

接口是完全面向对象的;有了接口:可插拔,拓展力强

接口是抽象的概念


  • Cat is a Animal 但凡满足is a 的表示 可以设置为继承

  • Customer has a FoodMenu 但凡是满足 has a 的表示都以属性的形式存在


总结一句话:面向接口编程,可以降低程序的耦合度,提高程序的扩展力,符合OCP开发原则

接口的使用离不开对态机制(接口+多态才可以达到降低耦合度)

接口可以解耦合,解开的是调用者和实现者的

调用者面向接口调用,实现者面向接口编写实现;

 

以后进行大项目开发,一般都是分离成一个一个模块。模块之间采用接口衔接。降低耦合度


三个字:解耦合!!


is a \has a \like a

类型与类型之间的关系

 

image-20210420214609884

抽象类和接口的区别

语法上的区别:

至于以后抽象类与接口的选择,通过项目中开发中体验学习

抽象类是半抽象的

接口是完全抽象的

抽象类 中有构造方法

接口中没有构造方法

接口和接口之间支持多继承

类与类之间只支持单继承

一个类可以同时实现多个接口

一个抽象类只能继承一个类(单继承)

接口中只能出现常量和抽象方法

 

以后接口使用的比抽象类多 ;一般抽象类使用的还是少。

接口一般都是对“行为”的抽象

 

 

 

 

 

 

 

 

又鸽了2天,有一定的其他因素,也有一定的自己原因

但是好起来了。

但是英语这几天一直没学。要抓起来,四级必须要过了。

键盘到了,键帽也拼上了,由于多了好多键,安装键帽的时候出笑话了

发群里 我四个方向键直接起码错了四个 

畸形哈哈哈哈哈哈然后home end这几个键也出错了

但是这键盘确实要爽得多

茶轴还是声音有点大,在这个办公室里,就是我一个人的敲打键盘声;。

好起来了。奥利给!!!1

posted @ 2021-04-20 21:58  各人blanknote  阅读(66)  评论(0)    收藏  举报