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:显示器(按键暴露出来操作,但实际的东西/细节方法被隐藏起来 ...
随机推荐
- VUE集成keycloak和Layui集成keycloak
一:KEYCLOAK配置部分: 1,下载keycloak,官网地址:https://www.keycloak.org/downloads.html.下载第一个就行 2,下载完毕之后,打开文件,访问 b ...
- java程序出现oom如何解决?什么场景下会出现oom?
1.什么是oom? OOM,全称"Out Of Memory",翻译成中文就是"内存用完了",来源于java.lang.OutOfMemoryError. 当J ...
- Spring系列14:IoC容器的扩展点
Spring系列14:IoC容器的扩展点 回顾 知识需要成体系地学习,本系列文章前后有关联,建议按照顺序阅读.上一篇我们详细介绍了Spring Bean的生命周期和丰富的扩展点,没有阅读的强烈建议先阅 ...
- Solution -「ARC 126E」Infinite Operations
\(\mathcal{Description}\) Link. 给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...
- 排查log4j不输出日志到文件的问题
问题描述 项目使用Spring Boot框架,在pom文件中添加了如下配置: <dependency> <groupId>org.slf4j</groupId> & ...
- DDD-领域驱动设计简谈
看到网上讨论 DDD 的文章越来越多,咱也不能甘于人后啊,以下是我对 DDD 的个人理解,短小精悍,不喜忽喷. 也谈DDD(领域驱动设计) 解决什么问题 传统模式,产品评审结束,开发人员就凭经验拆分模 ...
- python进阶(25)协程
协程的定义 协程(Coroutine),又称微线程,纤程.(协程是一种用户态的轻量级线程) 作用:在执行 A 函数的时候,可以随时中断,去执行 B 函数,然后中断B函数,继续执行 A 函数 (可以自动 ...
- logstash获取nginx日志的配置
nginx部分配置直接用json,省去很多麻烦 log_format json '{"@timestamp":"$time_iso8601",' '" ...
- MySQL高级优化
MySQL高级 1.索引是什么? (1)索引是排好序可以快速查找的数据结构 (2)方便快速查找,索引实际上也是一张表所以也是要占内存的 2.索引存在哪里? (1)InnoDB引擎 ①索引是和数据存放在 ...
- Java中Vo、Po等对象的解释
PO:全称是 persistant object持久对象 最形象的理解就是一个PO就是数据库中的一条记录. 好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象. BO:全称是 busines ...