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:显示器(按键暴露出来操作,但实际的东西/细节方法被隐藏起来 ...
随机推荐
- laravel 依赖注入 接口设计
假设我现在需要做一个支付服务,那么我先设计一个接口 interface PayInterface{ public function pay(Order $order) : string; } 然后实现 ...
- 【转】JVM--内存区域划分
[原文地址]https://blog.csdn.net/sd4015700/article/details/50109939 Eden Space.Survivor Space.Tenured Gen ...
- Hadoop文件操作常用命令
1.创建目录 #hdfs dfs -mkidr /test 2.查询目录结构 #hdfs dfs -ls / 子命令 -R递归查看//查看具体的某个目录:例如#hdfs dfs -ls /test 3 ...
- Springboot整合ElasticSearch进行简单的测试及用Kibana进行查看
一.前言 搜索引擎还是在电商项目.百度.还有技术博客中广泛应用,使用最多的还是ElasticSearch,Solr在大数据量下检索性能不如ElasticSearch.今天和大家一起搭建一下,小编是看完 ...
- Dubbo源码剖析二之注册中心
Dubbo基础二之架构及处理流程概述 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中架构中,无论是服务提供者还是服务消费者都离不开注册中心,可见注册中心之重要.Redis.Nacos. ...
- Redis——入门学习笔记
Redis学习 说到前面:这篇笔记只是我作为一个Redis新手,从0到认知的一个过程.后续会持续深入学习. 学习初衷和计划 学习Redis,因为这是热门技术,必须掌握的技术,别人都会我不会.就这一点就 ...
- HTML5/CSS3/JS笔记
HTML笔记: 前言: HTML无非就是围绕标签.属性.属性值这三个词展开的. (标签也可以叫做元素, 元素的内容是开始标签与结束标签之间的内容) *常规标签 <标签 属性1="属性值 ...
- SpringBoot+JavaMailSender+Redis完整找回密码功能
导入maven坐标 <parent> <groupId>org.springframework.boot</groupId> <artifactId>s ...
- .NET Core Dto映射(AutoMapper)
.Net Core Dto映射(AutoMapper) 我们假设一个场景, 采用EF Core+Web Api, 这时候可能会出现EF Core中的Entity Model和在项目中使用的Model之 ...
- WEB服务蜜罐部署实验
实验目的 了解WEB蜜罐的基本原理,掌握Trap Server的使用. 实验原理 Trap Server是一款WEB服务器蜜罐软件,它可以模拟很多不同的服务器,例如Apache. HTTP Serve ...