一、接口:是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基础之接口、多态的更多相关文章

  1. Java基础十二--多态是成员的特点

    Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...

  2. Java基础十--接口

    Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...

  3. Java基础-面向接口(interface)编程

    Java基础-面向接口(interface)编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的“类 ...

  4. [转帖]java基础学习总结——多态(动态绑定)

    https://www.cnblogs.com/xdp-gacl/p/3644035.html 多态的概念 java基础学习总结——多态(动态绑定) 一.面向对象最核心的机制——动态绑定,也叫多态

  5. java基础(11):接口、多态

    1. 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成. ...

  6. Java基础第二天--多态、接口

    多态 多态的概述 同一个对象,在不同时刻表现出来的不同形态 多态的前提和体现 有继承/实现关系 有方法重写关系 有父类引用指向子类对象 public class Animal { public voi ...

  7. java基础之接口(抽象类与接口的区别)

    概述 猫狗案例,我们想想狗一般就是看门,猫一般就是作为宠物了,对不.但是,现在有很多的驯养员或者是驯的,这应该属于经过特殊的培训训练出来的,对不.所以,这些额外的动作定义到动物类中就不合适,也不适合直 ...

  8. 【Java基础】接口和抽象类之间的对比

    Java 中的接口和抽象类之间的对比 一.接口 Interface,将其翻译成插座可能就更好理解了.我们通常利用接口来定义实现类的行为,当你将插座上连接笔记本的三角插头拔掉,换成微波炉插上去的时候,你 ...

  9. Java基础学习小记--多态

    题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓"早起毁一天"不是没有道理哪,特别对Coders来说,有几天不是加班到夜里.好吧,我承认对于初学Java的我, ...

  10. JAVA基础之接口

    接口 学习完框架之后,整合SSM过程中对于接口的认识加深了许多.根据<java核心技术>这本书进一步研究了一下. 1.概念 java核心技术是这样说的:"在Java程序设计中,接 ...

随机推荐

  1. Superset 下钻与交叉筛选

    以下内容来自外网:https://github.com/apache/superset/issues/6774 具体查看外网,我目前还没有琢磨,如果你有了思路请再下方留言 下面这个网址也有个交叉筛选: ...

  2. FLink17--聚合函数-AggWindowApp

    一.依赖 二.代码 package net.xdclass.class11; import org.apache.flink.api.common.RuntimeExecutionMode; impo ...

  3. 【忍者算法】从拉链到链表:探索有序链表的合并之道|LeetCode 21 合并两个有序链表

    从拉链到链表:探索有序链表的合并之道 生活中的合并 想象你正在整理两叠按日期排好序的收据.最自然的方式就是:拿起两叠收据,每次比较最上面的日期,选择日期较早的那张放入新的一叠中.这个简单的日常操作,恰 ...

  4. autMan奥特曼机器人-出现argument list too long报错的解决方法

    当你运行一段时间autMan后,可能会出现argument list too long的报错,那是你主机系统限制了autMan运行插件的参数长度,导致的报错,如下: 查看当前ARG_MAX的值 在 L ...

  5. Linux用户登录失败锁定策略

    1.账户锁定策略介绍 在Linux系统中,为了提高系统安全性,防止暴力破解攻击,我们可以通过配置PAM(Pluggable Authentication Modules)模块来限制登录失败次数并锁定用 ...

  6. php-fpm自动重启 解决方案

    环境:Mac.php7.1.nginx 现象:killall php-fpm,php-fpm自动重启 共有如下几种解决方案: 1.检查php-fpm.conf的deamonize模式是否开启 2.查找 ...

  7. 使用nodejs安装并使用vue操作步骤

    1.下载安装nodejs 官网下载nodejs并安装,我这边选择Windows的20版本 下载地址:https://nodejs.org/en/download/prebuilt-installer ...

  8. AI 核心能力与开发框架工程能力的共生关系解析

    一.本质定位:能力层与载体层的互补 1. AI 能力:突破性认知的"大脑" - 定义:AI 的核心能力(如大语言模型的泛化推理.多模态感知)源于算法创新.海量数据与算力突破,其本质 ...

  9. DeepSeek在M芯片Mac上本地化部署

    在 Mac 上使用 Ollama 运行 DeepSeek-R1,并通过 Open-WebUI 提供 Web 端访问. 1. 安装 Ollama Ollama官方:https://ollama.com/ ...

  10. 分布式锁—6.Redisson的同步器组件

    大纲 1.Redisson的分布式锁简单总结 2.Redisson的Semaphore简介 3.Redisson的Semaphore源码剖析 4.Redisson的CountDownLatch简介 5 ...