一、接口:是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. HashMap的put方法的扩容流程

    final Node<K,V>[] resize() { // [1,2,3,4,5,6,7,8,9,10,11,,,,] Node<K,V>[] oldTab = table ...

  2. Linux软连接与硬链接的概念

  3. Cockpit pg walkthrough Intermediate

    nmap 发现两个 web站 80 和 9090 还有 22端口 dirsearch 发现80端口有login.php 登录界面 发现没有弱口令 测试sql注入 测试了一会发现密码 password= ...

  4. linux下自建NAS教程

    NAS,英文全名Network Attached Storage,翻译过来是:网络附接存储. 引用维基百科定义 网络附接存储(英语:Network Attached Storage,缩写:NAS)[1 ...

  5. .NET 9 new features-C#13新的锁类型和语义

    C# 13 中,引入了新的锁类型和语义,主要用于增强多线程编程中的同步机制. 传统上,C# 使用 lock 关键字与任意的 object 实例配合,实现线程间的互斥访问.然而,这种方式可能存在性能瓶颈 ...

  6. flutter如何调试夜神模拟器

    1.下载夜神模拟器 地址:https://www.yeshen.com/ 下载后直接傻瓜式安装即可 2. 将夜神模拟器设置为手机版本 打开夜神模拟器,点击点击右上角的设置: 然后选择 性能设置 然后 ...

  7. flutter如何搭建android环境

    1.电脑上按安装sdk 首先配置Java的JDK 配好后,输入java 出现内容说明安装成功 然后在输入javac 出现内容说明jre安装成功 2.电脑上安装android Studio 安卓下载地址 ...

  8. Q:oracle表空间满了怎么办?

    查询表空间使用率: --查看表空间使用率 SELECT a.tablespace_name as "TABLESPACE_NAME", DECODE(TRUNC(total),0, ...

  9. telegraf、influxdb和grafana

    1 telegrafTelegraf 是一个开源的服务器代理,用于收集.处理和发送数据.它是 InfluxData 公司推出的 TICK 堆栈(Telegraf.InfluxDB.Chronograf ...

  10. Linux挂载U盘,SD卡

    Linux挂载U盘,SD(TF)卡 1.插入U盘,执行如下指令后能看到设备则说明连接成功 sudo fdisk -l #查看外接设备名称,一般为/dev/sd...,这里假设为/dev/sdc1 2. ...