java基础之接口、多态
一、接口:是Java语言中一种引用类型【组数、类也是引用类型】,内部主要就是封装了方法,
包括(抽象方法、默认方法、静态方法、私有方法)
格式:
public interface 接口名称 {
// 抽象方法 作用:该方法供子类实现使用
public abstract void show1();
// 抽象方法简写
void show2();
// 默认方法: 使用 default 修饰,不可省略,供子类调用或者子类重写 作用为了防止在接口升级中,而不音响子类对接口的实现,lambda表达式
default void show3(){}
// 静态方法: 使用 static 修饰,供接口直接调用
static void show4(){}
// 私有方法: 供接口中的默认方法或者静态方法调用。
private void show5()
}
二、接口的多实现: 一个类是可以实现多个接口
格式:
class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {
// 重写接口中抽象方法【必须】
// 重写接口中默认方法【不重名时可选】
}
特点:
接口中,有多个抽象方法时,实现类必须重写所有抽象方法。如果抽象方法有重名的,只需要重写一次。
接口中,有多个默认方法时,实现类都可继承使用。如果默认方法有重名的,必须重写一次。
接口中,无法定义成员变量,但可以定义常量,默认的修饰public static final修饰
格式:public static final 数据类型 常量名 =
接口中,无构造方法,无方法创建对象
接口中,没有静态代码块。
三、多态:一个对象拥有多种形态
例:小明是一个学生,同时也是一个人,即小明这个对象即拥有学生形态,也拥有人类形态
使用多态的前提【重点】
1 . 继承或者实现【二选一】
2. 方法的重写【意义体现:不重写,无意义】
3. 父类引用指向子类对象【格式体现】
格式:
父类类型 变量名 = new 子类名称()-->父类引用指向子类对象
或者
接口名称 变量名 = new 实现类名称()
多态下成员方法访问规则:
变量名.方法名a(); //看右边 new 的是谁就运行谁的方法,条件:子类重写父类的情况下
变量名.方法名b(); //该方法是父类特有的方法,此时将 new 子类名称()当作 new 父类名称()使用
a、看 new的谁,就优用先,没有则向上找,条件:子类重写父类的情况下
多态下成员变量访问规则:
a、直接通过对象访问成员变量,看等号左边是谁,优先用谁,没有向上找
b、间接通过成员方法访问成员变量,看该方法属于谁,优先用水,没有向上找
定义子类:
public class Zi extends Fu{
@Override
public void method() {
System.out.println("子类的方法.....");
}
int num = 20;
}
定义父类:
public class Fu {
public void method(){
System.out.println("父类方法.....");
}
public void methodFu(){
System.out.println("父类特有方法.....");
}
int num = 10;
int sum = 50;
public void shou(){System.out.println(sum)};
}
测试:
public class DemoTest {
public static void main(String[] args) {
System.out.println("...<多态下使用成员方法>...");
Fu f = new Zi();
f.method(); //父子类都有,优先用子
f.methodFu(); //子类没有,父类有,向上找到父类
System.out.println("...<多态下使用成员变量>...");
System.out.println(f.num);
f.shou();
}
}
四、引用类型转换
向上转型:多态本身写法,父类引用指向一个子类对象时,便是向上转型
格式:
父类类型 变量名 = new 子类类型();
如:Animal animal = new Cat(); 创建一只猫,把它当做动物看待
含义:右侧创建一个对象,把它当做父类来看待
注意事项:向上转型一定是安全的,从小范围转向大范围
存在问题:向上转型,不能访问子类特有的方法,所以需要向下转型
向下转型:其实是一个【还原】的动作
格式:子类类型 对象名 = (子类类型)父类对象
含义:将父类对象,【还原】成为本来的子类对象
Animal animal = new Cat(); //本来是猫,向上转型成为动物
Cat cat = (Cat)animal; //本来是猫,已经被当做动物了,还原回来成为本来的猫
注意事项:
a、必须保证对象本来创建的时候,就是猫,才能向下转型成为猫
b、如果对象创建的时候本来不是猫,现在非要向下转型成为猫,就会报错
变量名 instanceof 数据类型:这将会得到一个boolean直结果,也就是判断前面的对象能不能当做后面类型实例
java基础之接口、多态的更多相关文章
- Java基础十二--多态是成员的特点
Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...
- Java基础十--接口
Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...
- Java基础-面向接口(interface)编程
Java基础-面向接口(interface)编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的“类 ...
- [转帖]java基础学习总结——多态(动态绑定)
https://www.cnblogs.com/xdp-gacl/p/3644035.html 多态的概念 java基础学习总结——多态(动态绑定) 一.面向对象最核心的机制——动态绑定,也叫多态
- java基础(11):接口、多态
1. 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成. ...
- Java基础第二天--多态、接口
多态 多态的概述 同一个对象,在不同时刻表现出来的不同形态 多态的前提和体现 有继承/实现关系 有方法重写关系 有父类引用指向子类对象 public class Animal { public voi ...
- java基础之接口(抽象类与接口的区别)
概述 猫狗案例,我们想想狗一般就是看门,猫一般就是作为宠物了,对不.但是,现在有很多的驯养员或者是驯的,这应该属于经过特殊的培训训练出来的,对不.所以,这些额外的动作定义到动物类中就不合适,也不适合直 ...
- 【Java基础】接口和抽象类之间的对比
Java 中的接口和抽象类之间的对比 一.接口 Interface,将其翻译成插座可能就更好理解了.我们通常利用接口来定义实现类的行为,当你将插座上连接笔记本的三角插头拔掉,换成微波炉插上去的时候,你 ...
- Java基础学习小记--多态
题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓"早起毁一天"不是没有道理哪,特别对Coders来说,有几天不是加班到夜里.好吧,我承认对于初学Java的我, ...
- JAVA基础之接口
接口 学习完框架之后,整合SSM过程中对于接口的认识加深了许多.根据<java核心技术>这本书进一步研究了一下. 1.概念 java核心技术是这样说的:"在Java程序设计中,接 ...
随机推荐
- uniapp去修改vuex中state中的值
修改state中的值 修改state中的值,方法 (1) 在mutations中写修改state的api. (2)写好之后,直接store.commit("changeValue" ...
- 薄荷面 Bohemian
我回来了.正如柯洁回到B站. 然后 我将使用知乎格式写作(指换行空一行) 因为<阑山>太长了,有二三十万字,一时半会儿摸不完,同时还在摸几篇短篇小说,还要搞一些什么新概念大赛.冰心作文之类 ...
- Q:以非root用户编辑定时任务报错You are not allowed to use this program(crontab)
编辑定时删除文件任务时报错 crontab -e 编辑定时任务时报错,如下图所示 问题原因:/etc/cron.allow中没有添加对应的用户名解决办法:切换到root用户,在/etc/cron.al ...
- RabbitMQ(五)——发布订阅模式
RabbitMQ系列 RabbitMQ(一)--简介 RabbitMQ(二)--模式类型 RabbitMQ(三)--简单模式 RabbitMQ(四)--工作队列模式 RabbitMQ(五)--发布订阅 ...
- CTFHub技能树-信息泄露wp
信息泄露 信息泄露(Information Disclosure)通常指题目中意外暴露了敏感数据或隐藏信息,这些信息可能直接或间接帮助解题者获取Flag 常见类型如下: HTTP请求 robots协议 ...
- [SDOI2008] 洞穴勘测 题解
似乎所有的线段树分治题都能被 \(LCT\) 平替掉? 一眼动态树,直接 \(LCT\). Connect x y 操作用 \(link(x,y)\) 实现,Destroy x y 操作用 \(cut ...
- [AHOI2013] 差异 题解
后缀自动机维护子串公共后缀方便一点,所以直接倒序插入字符串即可. 我们给所有前缀打上标记,然后跑树形 \(dp\),设 \(sum_i\) 表示第 \(i\) 个点的子树内有多少个前缀,\(ans\) ...
- ((GPIO_TypeDef ) GPIOB_BASE)或((GPIO_TypeDef ) xxxx)
///////////////((GPIO_TypeDef ) GPIOB_BASE)或((GPIO_TypeDef ) xxxx)//////////////////// #define GPIOA ...
- 【.NET】调用本地 Deepseek 模型
本篇咱们来聊一聊怎么在 .NET 代码中使用本地部署的 Deepseek 语言模型.大伙伴们不必要紧张,很简单的,你不需要学习新知识,只要你知道 .NET 如何访问 HTTP 和 JSON 的序列化相 ...
- QT5笔记: 21. QStandardItemModel
QStandardItemModel 存放数据 QItemSelectionModel 选择项模型 例子:本例子中QListView 没有做任何处理,只是拖放至ui文件,设置了布局 mainwindo ...