LongJL 发表于 2021-7-12 21:30

【自学笔记】 Java基础 - 抽象及一些拓展知识

本帖最后由 LongJL 于 2021-7-12 21:32 编辑

# 抽象

## 概述
将共性的行为(方法)抽取到父类之后,发现该方法的实现逻辑无法在父类中给出具体明确,该方法就可以定义为抽象方法。

## 抽象类
如果一个类中存在抽象方法,那么该类就必须声明为抽象类
- 抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束
- 抽象类:抽象方法所在得类,必须是抽象类才行。在class之前写上abstract即可。

```Java
public abstract class Animal {
    //这是一个抽象方法,代表吃东西,但是具体吃什么(大括号得内容)不确定。
    public abstract void eat();
}
```
在任何版本的Java中,接口都能定义抽象方法
### 格式:
- public abstract 返回值类型 方法名称(参数列表);

### 注意事项:
- 抽象类不能创建对象
- 抽象类中有构造方法
- 抽象类的子类
      A:必须要重写父类中所有的抽象方法
      B:可以把自己也变成一个抽象类
- 抽象类种的方法
      抽象类中可以没有抽象方法,但是有抽象方法的类一点是抽象类

# 拓展
## 模板设计模式
- 设计模式( Design pattern )是一套被反复使用,经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性 。

- 模板设计模式:把抽象类整体可以看做成一个模板,模板中不能绝对的对象定义成抽象方法让使用模板的类(继承抽象类的累)去重写抽象方法实现需求

## final关键字

### 用法
1.可以用来修饰一个类
      格式:
                public final class 类名称{
                //....
      }
    含义:
            当前这个类不能有任何子类。不能被继承
    注意:
            一个类如果是final那么其中的所有成员方法都无法覆盖重写
2.可以用来修饰一个方法
      当final关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写。
      注意:对于类和方法来说,abstract关键字和final关键字不能同时使用,因为矛盾。
3.可以用来修饰一个局部变量
      表面该变量是常量,不能再次被赋值
4.可以用来修饰一个成员变量
      初始化:
                1.在创建的时候,直接给值
                2.在构造方法结束之前,完成赋值

注意事项:
1.一旦使用了final关键字修饰,说明不可改变
2.对于引用类型来说值可以改变,地址值不能改,但是地址值指向的内容可以改变!
3.常量的命名规范:如果是一个单词,所有字母大写,如果是多个单词,所有字母大写,但是中间需要使用"\_"分割

## 局部代码块
位置:方法中定义
作用:限定变量的声明周期,及早释放,提供内存利用率
```Java
public class Test{
      public static void main(String[] args){
                {
                        int a = 10;
                        System.out.println(a); // 10
                }
                System.out.println(a); // 报错
      }
}
```

## 构造代码块
位置:类中方法外定义
特点:每次构造方法执行的时候,都会执行该代码块中的代码,并且在构造方法中执行前执行
作用:将多个构造方法中相同的代码,抽取到构造代码块中,提供代码的复用性
```Java
public class Test{
      public static void main(String[] args){
                Student stu1 = new Student();
                Student stu2 = new Student(10);
               
                // 我是构造代码块
                // 空参数构造方法
                // 我是构造代码块
                // 带参数构造方法
      }
}

class Student{
      {
                System.out.println("我是构造代码块");
      }
      public Student(){
                System.out.println("空参数构造方法");
      }
      
      public Student(int a){
                System.out.println("带参数构造方法");
      }
}

```

LongJL 发表于 2021-7-12 21:33

final关键字那一块的缩进我在编辑看是有的,不知道为什么在这就没了我用Typora编辑也是正常的{:301_977:}

cjh1229 发表于 2021-7-12 22:27

感谢版主分享,正好需要

fen885588 发表于 2021-7-12 23:15

最近也在自学JAVA,不知道楼主有什么好好的教程和书籍推荐吗?

LongJL 发表于 2021-7-13 08:11

fen885588 发表于 2021-7-12 23:15
最近也在自学JAVA,不知道楼主有什么好好的教程和书籍推荐吗?

我现在看得是黑马得教程这个在52上面有得你可以找找,书籍得话我自己有一本Java从入门到精通,朋友推荐Java核心技术·卷 I(原书第11版) 和Java核心技术·卷 Ⅱ(原书第11版) 看着都还不错 这个在52上面也有PDF版得

一抹浅笑乱流年 发表于 2021-7-13 09:24

感谢分享,正想学习一下。

LongJL 发表于 2021-7-13 09:52

一抹浅笑乱流年 发表于 2021-7-13 09:24
感谢分享,正想学习一下。

{:301_997:}共同加油

wxfy2009 发表于 2021-7-13 12:40

目前正在自学中,感谢楼主分享。

fen885588 发表于 2021-7-13 13:07

LongJL 发表于 2021-7-13 08:11
我现在看得是黑马得教程这个在52上面有得你可以找找,书籍得话我自己有一本Java从入门到精通,朋友推荐Java ...

看教程 记笔记 这样子吗..

LongJL 发表于 2021-7-13 14:19

fen885588 发表于 2021-7-13 13:07
看教程 记笔记 这样子吗..

有的时候去翻翻API的文档什么的
页: [1]
查看完整版本: 【自学笔记】 Java基础 - 抽象及一些拓展知识