接口、多态

一.接口

1.接口的定义和使用

        接口名:和类名一样,首字母大写

public interface 接口名{//接口中的成员,一般写一些抽象方法
}
public class 类名 implements 接口名{//复写接口中所有的抽象方法
}

2.接口的成员热点:

(1)JDK7以及以前的版本

         1)接口中可以定义变量,默认被 public static final 修饰 (也就是常量)

         2)接口中只能是抽象方法,不能有其他方法。

(2)JDK8之后

        3)允许在接口定义默认方法(用于接口升级,它的实现类不用重写),使用public default 修饰,是带方法体的方法。

        4)允许在接口中定义静态方法,使用只能用接口名调用(其实现类的对象无法调用)

public class DemoSM {public static void main(String[] args) {SMImpl sm = new SMImpl();//sm.show();StaticMethod.show();}
}//定义实现类
class  SMImpl implements StaticMethod {//如果两个实现两个接口,有相同的静态方法,无逻辑冲突问题//因为其静态方法只能用接口名调用
}interface StaticMethod {public static void show(){System.out.println("我是SM中的静态方法");}
}

(3)JDK9

        5)允许在接口中定义私有方法(用于抽取默认方法相同的部分),用private修饰,只能用于本类,外类不能访问。

3.接口与类之间的关系

        1)类与类的关系:单继承的关系

        2)类与接口的关系:多实现的关系

        3)接口与接口:多继承的关系

二.多态

1.理解:同一个对象有多种表现形态(数据类型,可以是父类类型,也可以是本类类型)

举例: Animal a = new Dog();a = new Cat();Dog d = new Dog();

2.多态的前提

(1)必须要有继承/实现的关系

(2)要有方法复写

(3)有父类引用变量指向子类(或实现类)对象   

ps:在参数传递时,也可以体现多态的特性

3.多态的好处:【在定义一个方法时,把方法的参数写成父类类型,调用方法时可以传递任意的子类对象】

public class Demo {public static void main(String[] args) {//传入一个子类对象,用父类变量接收再使用父类方法调用animalEat(new Cat());animalEat(new Dog());}//好处,把方法的参数写成父类|接口类型,调用方法时,可以传递任意的子类对象public static  void  animalEat(Animal a){//Animal a =new Cat()//a =new Dog();a.eat();//传入一个用动物变量接收的狗类型对象if(a instanceof Cat){Cat cat = (Cat)a;cat.catchMouse();}if(a instanceof  Dog){//强转简化方法((Dog)a).lookDoor();}}
}abstract class Animal {public abstract void eat();
}class Cat extends  Animal{@Overridepublic  void eat(){System.out.println("猫吃鱼");}//猫的特有方法public  void catchMouse(){System.out.println("猫抓老鼠");}
}class  Dog extends  Animal{@Overridepublic void eat() {System.out.println("狗吃骨头");}//狗的特有方法public  void lookDoor(){System.out.println("狗看门");}
}打印结果:
猫吃鱼
猫抓老鼠
狗吃骨头
狗看门

4.多态的弊端【不能直接调用子类的特有方法,除非向下转型(强制转换)】

(1)向上转型:其实就是多态的写法

         如:Animal  a = new Dog();

(2)向下转型:把父类类型转换为子类类型

         如:Dog  d =    (Animal)a ;

(3)注意事项,向下转型可能出现类型转换异常(ClassCastExcetpion)

所以我们我们如果想让父类对应的转换达到预期,可以在转换之前加个判断

//instanceof可以用来判断对象是否可满足某个特定类型
if(a instanceof  Dog){//强转简化方法((Dog)a).lookDoor();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础笔试编程题(jz)

【1】计算某个单词在某文件中出现的次数. // 计算某个单词在某文件中出现的次数. public class WordCounter {private static int counter;private static String path System.getProperty("user.dir") File.separator "src" File.separator "com…

到底什么是 OAuth 2.0

转载自 到底什么是 OAuth 2.0 ? 一文秒懂!- 理解OAuth 2.0OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。本文对OAuth 2.0的设计思路和运行流程,做一个简明…

在eclipse中创建maven项目错误的解决方法:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-qu

当我们在ecipse安装 maven插件后, (how to install maven plugin named m2eclipse) You can install the lastest M2Eclipse release (1.7.0) by using the following update site from within Eclipse: http://download.eclipse.org/technology/m2e/releases 创建…

继承、抽象

继承、抽象 一.继承 1.继承解决的问题:共性抽取 子类中有共性的内容(成员变量、成员方法)抽取到父类中,子类可以直接使用父类非私有的成员。 2.继承的格式 public cLass 父类{//成员变量、构造方法、成员方法 }public class 子…

JDK 5 ~ 10 新特性倾情整理

转载自 JDK 5 ~ 10 新特性倾情整理最近连 JDK11都在准备发布的路上了,大家都整明白了吗?也许现在大部分人还在用6-8,8的新特性都没用熟,9刚出不久,10-11就不用说了。为了大家对JDK有一个全面的了解,下面我为…

Java 内存模型 JMM 详解

转载自 Java 内存模型 JMM 详解JMM简介 Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性、是否可以重排序等问题的无关具体平台的统一的保证。(可能在术语上与Java运行时内存分布有歧义,后者指堆、方法区、线程栈等内存…

多种代码块

代码块 1.概念 代码块其实就是一对{ },根据其放的位置不同,它的特性也不同 2.分类 (1)构造代码块 位置:类中方法外 作用:提取构造方法中共性的代码,每次执行构造方法都会执行。 (…

spring boot 入门-使用spring boot构建简单应用

目的&#xff1a;建立一个简单的联系人列表&#xff1b; 使用 spring boot maven 进行构建 【0】文件结构如下&#xff1a; 【1】pom.xml 如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.o…

object面试题

equals方法 public class Demo {public static void main(String[] args) {String s1 "abc";StringBuilder sb new StringBuilder("abc");//System.out.println(sb.append("a"));//s1是字符串,则equals为字符串比较内容,// 由于比较对象不为字…

Jodd - Java界的瑞士军刀轻量级工具包

转载自 Jodd - Java界的瑞士军刀轻量级工具包&#xff01; Jodd介绍 Jodd是对于Java开发更便捷的开源迷你框架&#xff0c;包含工具类、实用功能的集合&#xff0c;总包体积不到1.7M。 Jodd构建于通用场景使开发变得简单&#xff0c;但Jodd并不简单&#xff01;它能让你把事情做…

spring boot 入门荔枝

【0】README spring boot 的4个核心功能介绍&#xff1a; 1. 自动配置&#xff1a; 无需 java配置或 xml配置&#xff0c;spring boot 会自动配置bean &#xff1b; 2. 起步依赖 &#xff1a; 为项目提供依赖管理&#xff0c;特别是解决了 各个 依赖jar 包的兼容性问题&…

基本数据类型与字符串的转换

基本数据类型与字符串的转换 1.字符串转化成其他类型 口诀:需要转成什么类型就用什么类型的包装类调用方法 byte Byte short Short int Integer long Long char Character float Float double Double boolean Boolean2.其他类型转…

Tomcat Get请求的巨坑

转载自 Java程序员注意&#xff1a;Tomcat Get请求的巨坑&#xff01; Tomcat8.5&#xff0c;当Get请求中包含了未经编码的中文字符时&#xff0c;会报以下错误&#xff0c;请求未到应用程序在Tomcat层就被拦截了。 Tomcat报错&#xff1a; java.lang.IllegalArgumentExceptio…

spring boot actuator 入门荔枝

1.创建maven 项目&#xff0c; 通过 http://start.spring.io/ 构建项目结构 2. 3个核心文件内容 ReadinglistApplicatoin.java package com.tangrong;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplicat…

BigDecimal习题

BigDecimal习题 1.定义一个double类型的数组 double[] array{1.2, 0.6, 0.01, 3.2, 5.56, 7.21}; 2.使用BigDecimal求数组中元素的平均值&#xff0c;保留2位小数(四舍五入) 注意&#xff1a;每一个元素都需要封装为BigDecimal对象&#xff0c;才能进行运算&#xff0c;运算的…

Spring Boot 发布 jar 包转为 war 包秘籍。

转载自 Spring Boot 发布 jar 包转为 war 包秘籍。Spring Boot是支持发布jar包和war的&#xff0c;但它推荐的是使用jar形式发布。使用jar包比较方便&#xff0c;但如果是频繁修改更新的项目&#xff0c;需要打补丁包&#xff0c;那这么大的jar包上传都是问题。所以&#xff0c…

java的几种对象(PO,VO,DAO,BO,POJO)解释

本文转自&#xff1a; http://blog.csdn.net/bzhxuexi/article/details/8227808 Java的几种对象(PO,VO,DAO,BO,POJO)解释 一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录&#xff0c;多个记录…

Redis 的 4 大法宝,2018 必学中间件

转载自 Redis 的 4 大法宝&#xff0c;2018 必学中间件&#xff01;Redis是什么&#xff1f;全称&#xff1a;REmote DIctionary ServerRedis是一种key-value形式的NoSQL内存数据库&#xff0c;由ANSI C编写&#xff0c;遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、…

数据交换方法

数据交换方法 一.定义三方变量 【代码实现常用】 int a9; int b10;//定义第三方变量 int tempa; ab; btemp;System.out.println("a"a);//a10 System.out.println("b"b);//b9二.基本位运算&#xff08;^&#xff09; 概念&#xff1a; 参加运算的两个数据…

高级 Java 必须突破的 10 个知识点

转载自 高级 Java 必须突破的 10 个知识点&#xff01; 工作多少年了&#xff0c;还在传统公司写if / for 等简单的代码&#xff1f;那你就真的要被社会淘汰了&#xff0c;工作多年其实你与初级工程师又有多少区别呢&#xff1f;那么作为一个高级Java攻城狮需要突破哪些知识点呢…