Java学习笔记:03面向对象-接口_多态
1.类的概念
一堆具有共同的成员变量(属性)和成员方法(功能)对象的集合
2.接口的概念
接口是功能的集合,就是方法的集合
接口中只能定义方法,不能定义普通的成员变量
而且接口中的成员方法,必须是抽象
接口是比抽象类还抽象的一种类型
接口不能创建对象
通常叫"父接口"
3.接口的定义
定义类用关键字:class
定义抽象类用关键字:abstract class
定义接口关键字:interface
定义枚举用关键字:enum
格式:
public interface 接口名字{
/成员变量,不能定义普通的成员变量
//成员方法:必须都是抽象的
public abstract 返回值类型 方法名();
}
4.各类型之间的关系
类和类之间:继承,而且是单继承,一个子类,只能有一个直接父类
接口和接口之间:继承,但是可以多继承,一个子接口,可以有多个直接父接口
类和接口之间:不叫继承(extends),叫实现(implements)
只有类实现接口
实现implements和继承差不多,实现是把接口中的抽象方法都拿过来
面试题:java到底支不支持多继承?
如果是类与类,不支持多继承,只支持多层继承
如果是接口和接口,支持多继承,也支持多层继承
5.接口中成员的特点
5.1成员变量(可以定义),但必须有固定的修饰符public static final 数据类型 变量 = 值,固定修饰符可以不写,不写编译器自动添加
5.2成员方法,必须是固定工就是福public abstract 即抽象方法
5.3接口不可以创建对象(抽象类也是)
5.4实现类去实现类接口,它必须重写接口中所有的抽象方法,然后才能创建对象,否则这个实现类还是一个抽象类,是不能创建对象的
在开发中最常用的模式:
一个类继承一个抽象类,同时实现多个接口
public class A extends AbstractClasB implments 接口A,接口B{
//注意:
A中必须重写抽象类中的抽象方法,以及所有接口中的抽象方法
}
接口和抽象类的异同
1.相同点:
a.都不能创建对象
b.都是做为父类/父接口
c.子类/实现类/都必须重写抽象方法,然后才能创建对象
2.不同点:
a.抽象类用关键字abstract 接口用关键字interface
b.抽象类中可以有抽象方法,可以没有抽象方法,也可以有部分是抽象方法,部分不是抽象方法
接口中只要有方法,必须都是抽象的
c.抽象类型可以定义任意成员变量 接口的成员变量必须是public static final 修饰
d.类和抽象类之间的关系是单继承,类和接口之间关系是多实现
e.思想上的区别:
_1.抽象类中必须定义整个继承体系的共性内容
_2.接口类中定义整个体系之外的扩的功能
面向对象的三大特点:封装(安全性)/继承(扩展性)/多态(灵活性)
多态:
多态是对象的多态
_一个对象的多种状态
_比如:你在学校是学生,在家是儿女,在公司是员工
在java中的多态
前提:
_1.必须有字符关系(必须有继承)
_2.必须有方法的重写
多态在java中的表现形式:(两种格式)
_1.父类类型 变量名 = new 子类类型();
_2.接口类型 变量名 = new 实现类();
注意事项:
使用多态调用成员变量
_编译/运行都看左边的父类
使用多态调用成员方法
_编译时 看左边 父类
_运行是 看右边 子类
多态的弊端:
_多态只能调用子父类共有的方法
_不能调用子类特有的方法
弊端的解决方案:
_向下转型:多态,强制类型转换 int a = (int)3.14;
_向上转型:自动类型转换 double d = 10;
__Animal an = new Dog();
向下转型的弊端:
_把父类的变量转成子类类型的时候编译器直接编译通过
java中解决向下转型弊端的方法:
_一个关键字instanceof 运算符
_作用:判断某一个变量 不是 该类的类型
_格式:boolean b = an instanceof 类名
//使用instanceof运算符进行判断
boolean b =an instanceof Dog;
if(b){
Dog d = (Dog)an;
d.lookHome();
}
多态的好处:
提高了程序的灵活性
_父类类型的变量,可以接收任何一个子类的对象
_调用方法的时候,编译时看父类,运行时传递过来的子类对象中的方法
设计模式是什么(35种)
可以理解为规则,是共同制定用于解决问题的方案,总结的一个套路
1.代理设计模式
_1.1静态代理设计模式
_1.2动态
Java学习笔记:03面向对象-接口_多态的更多相关文章
- Java学习笔记——继承、接口、多态
浮点数的运算需要注意的问题: BigDecimal operand1 = new BigDecimal("1.0"); BigDecimal operand2 = new BigD ...
- Java学习笔记:04面向对象-内部类_访问修饰符_final
04面向对象-内部类/访问修饰符/final 1.static的介绍 static:关键字,静态的 static的作用是用来修饰类中的成员 2.访问一个类中的某一个成员变量 方法一: _1.创建对象 ...
- Java学习笔记(十)面向对象---接口
理解 初期理解 可以认为接口是一个特殊的抽象类.当接口中的方法都是抽象的,那么该类可以通过接口的形式来表示. class用于定义类 interface用于定义接口 格式特点 接口中常见定义:常量,抽象 ...
- Java学习笔记之---面向对象
Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...
- Java学习笔记之---比较接口与抽象类
Java学习笔记之---比较接口与抽象类 抽象类是描述事物的本质,接口是描述事物的功能 接口与抽象类的异同 1.一个类只能继承一个父类,但是可以有多个接口 2.抽象类中的抽象方法没有方法体,但是可以有 ...
- Java学习笔记之面向对象、static关键字
一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...
- Java 学习笔记(4)——面向对象
现在一般的语言都支持面向对象,而java更是将其做到很过分的地步,java是强制使用面向对象的写法,简单的写一个Hello Word都必须使用面向对象,这也是当初我很反感它的一点,当然现在也是很不喜欢 ...
- 《java JDK7 学习笔记》之接口与多态
1.对于"定义行为"也就是接口,可以使用interface关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public修饰的. 类要操作接口,必须使用imp ...
- 疯狂java学习笔记之面向对象(五) - 封装、继承、多态
一.封装: 封装的概念: - 合理的隐藏:隐藏不想被外界操作的Field.方法.构造器 - 合理的暴露:一般就是希望给别人调用的方法 e.g:显示器(按键暴露出来操作,但实际的东西/细节方法被隐藏起来 ...
随机推荐
- 利用babel将es6语法转es5的简单示例
前言 Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行. 这意味着,你可以现在就用ES6编写程序,而不用担心现有环境是否支持. 文件目录结构 生成包管理配置文件pa ...
- 区段统计 mysql 语句 case when then end as
EXPLAIN SELECT COUNT(*),CASEWHEN device_width > 729 THEN '>729'WHEN device_width BETWEEN '720' ...
- MySQL 数据库SQL语句——高阶版本2
MySQL 数据库SQL语句--高阶版本2 实验准备 数据库表配置: mysql -uroot -p show databases; create database train_ticket; use ...
- Feign的异步调用或者MQ调用与Security的问题处理;
两大踩坑点: 一:部分框架自带有查询当前登录人的信息工具,无需各种本地线程栈ThreadLocals取Request啥的折磨自己: 二:Security自带有uri匹配的工具,没事多翻翻源码,原创方法 ...
- 深入Java微服务之网关系列1:什么是网关
前言 近来,在想着重构一个新的产品.准备采用微服务的技术解决方案,来搭建基础设施框架.网关,是一个必不可少的组件.那么,网关到底是什么? 其又有什么特点或者特性,成为微服务必不可少的组件呢?今天, ...
- Java中eq、ne、ge、gt、le、lt的含义
Java中eq.ne.ge.gt.le.lt 关系运算符包括EQ.NE.GE.GT.LE.LT几个,关系运算符返回的是真"True"或假"False". eq( ...
- Spring Cloud之微服务注册到Eureka Server集群后访问改造
上篇Spring Cloud之服务注册中心搭建Eureka Server服务注册中⼼ - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)已经已经成功将两个微服务注册到集群中,那么能正常能与注 ...
- win10 VScode配置GCC(MinGW)
前提 安装 Visual Studio Code 安装 C/C++ 扩展 for VS Code 也可以在vscode的extension界面搜索'c'查找插件安装 获取最新的 Mingw-w64 , ...
- MYSQL 获取最近多少天时间列表
1.首先获取一个最近1000天的时间列表,如果不够可以按规则再加 SELECT adddate(CURDATE(),-(t2.i * 100 + t1.i * 10 + t0.i)) date FRO ...
- 一个命令让redis服务端所有信息无所遁形~(收藏吃灰系列)
1.info命令作用 在redis客户端执行INFO 命令以便于计算机解析和人工阅读的简单格式返回有关redis服务端的所有信息和统计数据. 可选参数可用于选择特定的信息部分: Server 服务器基 ...