系统学习JAVA第十二天(抽象类和接口的异同,static,final,static final)

系统学习JAVA第十二天

一、抽象类和接口的异同

1、类和类是单根继承,继承了类就拥有了什么特征,成为了什么——is-a
类拥有:属性、setget、构造方法、静态代码块、代码块、可以有也可以没有抽象方法
类是具有相同特征和行为的一类事物
抽象类可以通过匿名内部类进行实现
匿名内部类,可以实现多个抽象方法

抽象类补充:

一个类继承了抽象类,报错的解决方式:要么重写抽象类中的方法,要么把自己声明为抽象类
(抽象类也是类,遵守单根继承)
2、接口——注重的是方法 ,实现了接口就拥有了什么功能 ——has-a
接口可以多实现,拥有常量和抽象方法,在jdk1.8开始才能有方法体
接口可以通过匿名内部类进行实现,还可以通过lambda表达式

Lambda 表达式的格式:

(要实现的方法 是不是又参数  ---------参数的位置)->{实现方法要写的代码}
	方法调用时再传入具体的数据
//jdk1.8  lambda  表达式  接口中 替代匿名内部类的
       Shape s = new Shape() {
           @Override
           public void area() {
               System.out.println("匿名内部类对接口的实现。。。。");
           }
       };
          //方法调用
        s.area();
//        方法的实现 
        Shape s1 = ()-> System.out.println("Lambda表达式替换匿名内部类对接口的实现。。。。");
        //方法调用
        s1.area();
如果方法有参数 就必须在()写上对应个数的参数,并且数据类型可以省略
Shape s = (a,b)-> System.out.println(a);
如果没有参数 则必须写一个空()
Shape s1 = ()-> System.out.println("Lambda表达式替换匿名内部类对接口的实现。。。。");
方法是否有返回值,如果有且代码只有一句 则{} 和return都可以省略
Shape  s3 = (a)->a;
方法如果没有返回值 且代码只有一句 则{} 可以省略
Shape  s4  = (int a)-> System.out.println("hhh"+a);
①接口和类的应用场景:
多个类之间有共同特征————继承
框架,面向接口的开发————接口
写项目,设计模式————面向接口 书写实现类 
②接口类型:

1 普通接口
一个类实现一个接口,要么重写接口中的抽象方法,要么声明成抽象类不用重写方法,接口拥有:常量、抽象方法,在JDK1.8之后关键词default和static修饰的方法可以出现方法体
2 标记接口
例如:序列化接口
实现了序列化接口就被标记,具有了序列化的功能
3 注解接口
Public @interface Override {}

③注:
Lambda表达式对接口实现,接口中只能有一个抽象方法
接口默认的方法都是抽象方法

二、static

static优先分配内存,类加载时进行的分配内存空间

1、 static可以修饰
①全局变量——类变量
②自己定义的方法——类方法(static修饰的方法不能进行方法重写)
③静态代码块

格式:

static{}

静态代码块 不用我们手动调用执行 ,随着类的加载(当我们使用一个类就会被加载 ),自动执行 只执行一次(以后遇到在类加载时 只执行一次的代码 放到静态代码块中)

如何使用一个类?

1 创建了这个类的对象
2 main方法所在的类 默认被加载
3 类调用了类变量或者类方法 

类和类之间继承关系, 父类和子类谁先加载?

父类先加载,子类后加载;类和子类都有静态代码块,父类先执行

引申:构造代码块
格式

{}

在类中直接写了一个{}就是构造代码块,在构造方法执行前默认执行的一段代码,只要使用了构造方法 ,就会在构造方法前执行这段代码。

在有继承关系的类中,静态代码块、构造代码块、构造方法执行顺序:

父类的静态代码块
子类的静态代码块
父类的构造代码块
父类的构造方法
子类的构造代码块
子类的构造方法
2 、static不可以修饰
①类
②局部变量
③getset方法
④构造方法
⑤抽象方法

注:
JDK 1.8 的版本中出现了新的关键词,default可以修饰方法,抽象方法可以有方法体;同时在这个版本后static,也能让抽象方法拥有方法体

 default void a(){}
 static void b(){}

三、final

1、final可以修饰

final最后的、最终的————不改了————只读(有值可读)

①普通类(final修饰的类不能被继承)
②全局变量
给全局变量赋值的方式:
	1 直接定义变量时,给final的变量赋初值
	2 在使用final修饰的变量前,给变量赋初值就可以,{}构造代码块,使用对象之前执行的代码
	3 构造方法中赋值
③局部变量
④getset(但是我们一般不会这么用)
⑤自己定义的方法(final修饰的方法不能被重写)
2、final不可以修饰
①构造方法
②抽象方法
③抽象类

四、static final

static final修饰的变量——值不能在修改 = 常量

1 、基本数据类型

基本数据类型的值不能改变

static final int A = 10 ;  //A是常量不可变,用大写字母表示常量
2 引用数据类型

引用数据类型的地址不能改变,但是值可以改变

static final int[] A = new int[10];  //A地址,地址不可变,里面的内容(值)可以变
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值