final:

1.理解:凡是final修饰的东西都具有了不变的特性;

2.修饰对象:

1)final+类--->类无法被继承;

2)final+方法--->方法无法被覆盖;

3)final+变量--->只能被赋值一次;

eg:被 final 修饰的引用,由于只能被赋值一次,所以其储存的地址不变,所以它的指向也就不会改变,但不代表其指向的对象内部的数据不会改变;

注意:

被 final 修饰的变量为实例变量时,必须手动初始化(否则报错),不能系统自动赋值了;

final 修饰的静态变量一般与static联合使用,称为常量,eg:public static final double PI = 3.1415926 ;

抽象方法:

1.概念:被 abstract 修饰的方法,无方法体(  { } 也不能写 ),而且不以 ” } “结尾,以 ” ;“ 结尾;

2.格式:public abstract void fangFa ( ) ;

3.注意:抽象方法可以有参数列表;

抽象方法被重写时,abstract 要去掉;参数列表不能改变;并且加上方法体;

抽象类与接口:

1.抽象类:

1)概念:将类之间的共同特征提取出来,抽象为一个类,这种类就叫抽象类;

2)格式:abstract + class + 类名

3)抽象类可以被继承,子类可以为抽象类,也可以不是,但如果不是抽象类,必须对抽象类(父类)中的所有抽象方法进行覆盖;

4)注意:抽象类无法实例化为对象;

若抽象之间有共同特征,也可将其进一步抽象为一个抽象类;

final 与 abstract 不能联合修饰一个东西;

抽象类中也有构造方法,意义:给子类使用;

抽象类中可以有普通方法,也可以有抽象方法,但是抽象方法必须出现在抽象类中,不能出现在非抽象类中;

2.接口:

1)定义: interface + 接口名

2)特性:

接口支持多继承;

接口中所有的方法都是默认被 public abstract 修饰的,且可以省略,eg: 返回值类型 + 方法名(参数列表);

接口中的所有量都是默认被 public static final 修饰的,且可以省略,所以接口中只有常量,没有变量;

接口被继承不用 extends 用 implements(实现);

接口的完全抽象的性质,可以进一步使程序的耦合性降低,拓展性提高;

3)注意;

extends 可以与 implements 共存,extends 在前,implements 在后;

接口由于是完全抽象的,所以被实现时,也与抽象类遵循相同的规则,若子类不为抽象类,则需要对接口中的所有抽象方法都进行方法覆盖

分析原因:因为继承与实现都相当于将类体中或接口内的代码复制粘贴到子类中,所以遵循” 抽象方法只能出现在 抽象类 / 接口中 “的原则,必须要对 抽象/接口 中的所有抽象方法进行方法覆盖-->即将抽象方法转化为普通方法 ;

3.抽象类与接口的区别;

1)构造方法:前有,后无;

2)继承机制:前单继承,后多继承(interfaces 后可以加多个接口,extends 后只可以加一个类)

3)抽象类中的方法与量都无限制,接口中的方法只能是抽象方法,量只能是常量;

解析继承,关联,与实现:

1.继承:” is a “,   例如:猴子是一种动物,则 猴子 extends 动物;

---使猴子继承动物该有的特性

2.关联:” has b “,例如:我有一双鞋类,则 class 我 {   鞋  鞋 ;  }

---将鞋类作为一种属性写在 我类 中,因为我穿鞋呀,所以利用关联来使” 我 拥有了 鞋“

3.实现:” like c “,例如:厨师像一个菜单一样,则  class  厨师  interfaces  菜单  {  重写菜单中的方法  }

---对于” 顾客利用菜单来点菜 “的机制来说,厨师类来实现接口,顾客来调用接口

辅助理解代码:

public class 顾客点西式柿子炒鸡蛋 {
public static void main(String[] args) {
//利用多态机制创建美国厨师对象
FoodMenu cooker=new AmericanCooker();
//调用构造方法使 顾客拿到了菜单,并将对象美国厨师传到了菜单中
Customer customer=new Customer(cooker);
//调用顾客中的点菜方法(顾客中的点菜方法调用菜单中的柿子炒鸡蛋方法,此时菜单中的方法已被美国厨师中的方法覆盖了,所以顾客吃到的是西式柿子炒鸡蛋)
customer.order();
}
}
interface FoodMenu{
void shiZiChaoJiDan();
}
class ChinaCooker implements FoodMenu{
public void shiZiChaoJiDan(){
System.out.println("中国师傅做的柿子炒鸡蛋!");
}
}
class AmericanCooker implements FoodMenu{
public void shiZiChaoJiDan(){
System.out.println("美国师傅做的柿子炒鸡蛋!");
}
}
class Customer{
private FoodMenu foodMenu;
public Customer() {
}
public Customer(FoodMenu foodMenu) {
this.foodMenu = foodMenu;
}
public FoodMenu getFoodMenu() {
return foodMenu;
}
public void setFoodMenu(FoodMenu foodMenu) {
this.foodMenu = foodMenu;
}
public void order(){
foodMenu.shiZiChaoJiDan();
}
} 运行结果: 美国师傅做的柿子炒鸡蛋! Process finished with exit code 0

代码解析;

1.菜单是一个接口(菜单上有一个抽象的照片:柿子炒鸡蛋);

2.顾客面向菜单点菜,调用接口;

3.后台的厨师负责把柿子炒鸡蛋做好,是接口的是实现者;

4.接口作用:这个饭馆的菜单,让顾客和后厨解耦合了,顾客不用找后厨,后厨不用找顾客,他们之间完全依靠这个抽象的菜单沟通;

5.总结:面向接口编程,可以降低程序的耦合度,提高程序的拓展力;接口的使用离不开多态机制(接口+多态才可以达到降低耦合度);任何一个接口都有调用者和实现者,接口可以将调用者与实现者解耦合,调用者面向接口调用,实现者面向接口编写实现;

随笔:

Java语言中凡是没有方法体的方法都是抽象方法?

错,Object 类中就有很多方法都没有方法体,都是以 ” ;“ 结尾的,但他们 都不是抽象方法,eg:public native int hashCode( ) ;

此方法底层是调用了C++写的动态链接库程序,native 表示调用 JVM 本地程序;


由于博主目前只是一只猿宝宝,所以有些地方可能说的有些片面,若前辈们能够指点一二就更好了      (~ ̄(OO) ̄)ブ

【JAVA】笔记(5)--- final;抽象方法;抽象类;接口;解析继承,关联,与实现;的更多相关文章

  1. 菜鸡的Java笔记 第三十五 接口定义增强

    接口定义增强        在java从一开始到现在接口之中的核心组成部分:抽象方法与全局常量,但是随着技术的不断发展,用户在使用过程之中发现了有一些问题        如果说现在有一个接口经过了长年 ...

  2. Java进阶篇(一)——接口、继承与多态

    前几篇是Java的入门篇,主要是了解一下Java语言的相关知识,从本篇开始是Java的进阶篇,这部分内容可以帮助大家用Java开发一些小型应用程序,或者一些小游戏等等. 本篇的主题是接口.继承与多态, ...

  3. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  4. JAVA笔记20-容器之四Map接口、自动打包、泛型(重要)

    一.Map接口 Map提供的是key到value的映射.key不能重复,每个key只能映射一个value. 注:重复是指equals,但用equals()方法效率低,所以此处用hashCode()方法 ...

  5. JAVA笔记19-容器之三 Set接口、List接口、Collections类、Comparable接口(重要)

    一.Set接口 //HashSet综合举例 import java.util.*; public class Test{ public static void main(String[] args){ ...

  6. JAVA笔记2-面向对象与内存解析

    1.java中的变量先声明.再赋值.再使用.(局部变量必须初始化,成员变量默认初始化) 2.基本类型之外的所有类型都是引用类型.基本类型占一块内存,引用类型占两块(所有new出来的东西装在堆内存,因为 ...

  7. java复习(5)---接口、继承、多态

    Java作为完全面向对象语言,接口.继承和多态是三个非常重要的概念. 1.继承. (1)关键字: extends (2)子类用super()调用父类构造函数,用super().方法 调用父类的成员方法 ...

  8. java详解final、多态、抽象类、接口原理

    1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. C:它修饰的变量,是一个常量. (3)面试相关: ...

  9. JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展

    JAVA之旅(七)--final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展 OK,我们继续学习JAVA,美滋滋的 一.final 我们来 ...

随机推荐

  1. P4332-[SHOI2014]三叉神经树【LCT】

    正题 题目链接:https://www.luogu.com.cn/problem/P4332 题目大意 给出\(n\)个点的一棵有根三叉树,保证每个点的儿子个数为\(3\)或者\(0\),每个叶子有一 ...

  2. 通过Git在本地局域网中的两台电脑间同步代码

    0.前言 一般情况下同步代码可以通过在GitHub/GitLab等网站新建远程仓库,所有机器都向仓库推送或者从仓库下拉更新. 上述过程步骤也不算复杂,不过有时候我们考虑到仓库的安全性等因素,只想在局域 ...

  3. Oracle实时数据抽取项目问题总结

    Oracle实时数据抽取项目问题总结 项目背景介绍 项目主要是将Oracle.MySQL.SQLServer.Db2等其他数据库的实时变更数据同步到其他异构数据库中.本篇文章主要是讨论oracle的实 ...

  4. Vue组件间的数据传输

    1.父组件向子组件传输数据:自定义属性 1 //父组件 2 <Son :msg="message" :user="userinfo"></So ...

  5. 《面试八股文》之 JVM 20卷

    微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是 moon. <面试八股 ...

  6. 从0到1使用Kubernetes系列——Kubernetes入门

    基本概念 Docker 是什么 Docker 起初是 dotCloud 公司创始人 Solomon Hykes 在法国的时候发起的一项公司内部项目,Docker 是基于 dotCloud 公司多年云服 ...

  7. Spring Security OAuth2 微服务认证中心自定义授权模式扩展以及常见登录认证场景下的应用实战

    一. 前言 [APP 移动端]Spring Security OAuth2 手机短信验证码模式 [微信小程序]Spring Security OAuth2 微信授权模式 [管理系统]Spring Se ...

  8. 未来云原生 | CIF 论坛精彩看点

    当下云原生技术正在飞速发展,那么如何准确理解「云原生」?在发展不够成熟,行业认知差异大的情况下,不论是云原生计算基金会(CNCF),还是行业的任何大咖,都不能给出精确的.便于理解的定义.我们要理解的逻 ...

  9. PAT (Basic Level) Practice (中文)1026 程序运行时间 (15分)

    1026 程序运行时间 (15分) 要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费 ...

  10. Python代码阅读(第21篇):将变量名称转换为蛇式命名风格

    Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码 本篇阅读的代码实现将变量名称转换为蛇式命名风格(snake case)的功能. 本篇阅读的代码片段来自于30-second ...