Java SE 第二十二讲----接口interface
1.接口:interface:接口的地位等同于class,接口中的所有方法都是抽象方法。在声明接口中的方法的时候,可以使用abstract关键字也可以不使用。通常情况下,都会省略掉abstract关键字。
2.可以将接口看作是特殊的抽象类(抽象类中可以有具体方法,也可以有抽象方法,而接口中只能有抽象方法,不能有具体方法)
package com.cl.abstracttest; public interface InterfaceTest { public abstract void output();//可以省略掉abstract关键字 }
3.类跟继承的关系
类可以实现接口。实现使用关键字implements表示。代表某个类实现了某个接口。
4.一个类实现了某个接口,那个该类必须要实现接口中声明的所有方法。如果该类是个抽象类,那么就无需实现接口中的方法了。
报错:The type MyClass must implement the inherited abstract method MyInterface.output()
解决办法:
package com.cl.abstracttest; public class Test3 { public static void main(String[] args) {
MyClass myClass = new MyClass();
myClass.output();
}
} interface MyInterface{ public void output();
}
class MyClass implements MyInterface
{ @Override
public void output() {
System.out.println("test"); } }
5.java是单继承的,也就是说某个类只能有唯一一个父类,一个类可以实现多个接口,多个接口之间使用逗号分隔。
package com.cl.abstracttest; public class Test3 { public static void main(String[] args) {
MyClass myClass = new MyClass();
myClass.output();
myClass.output2();
}
} interface MyInterface{ public void output();
} interface MyInterface2{
public void output2();
}
class MyClass implements MyInterface,MyInterface2
{ @Override
public void output() {
System.out.println("test"); } @Override
public void output2() {
System.out.println("test2"); } }
6.
package com.cl.abstracttest; public class Test3 { public static void main(String[] args) {
MyClass myClass = new MyClass();
myClass.output();
myClass.output2();
myClass.output3();//从父类继承过来的
}
} interface MyInterface{ public void output();
} interface MyInterface2{
public void output2();
} class MyParent{
public void output3(){
System.out.println("output3");
}
} class MyClass extends MyParent implements MyInterface,MyInterface2//继承了父类,还继承了两个接口
{ @Override
public void output() {
System.out.println("test"); } @Override
public void output2() {
System.out.println("test2"); } }
输出结果如下:
test
test2
output3
多态:所谓的多态是指父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。关于接口与实现接口的类之间的强制类型转换方式与父类与子类之间的强制类型转换方式完全一样。
package com.cl.abstracttest; public class Test4 {
public static void main(String[] args) {
AA bb = new BB();//接口类型的引用可以指向实现该接口的类的实例
bb.output();
}
} interface AA{
public void output();
}
class BB implements AA{ @Override
public void output() {
System.out.println("BB"); } }
关于接口与实现接口的类之间的强制类型转换方式与父类与子类之间的强制类型转换方式完全一样。这句话理解有如下代码
package com.cl.abstracttest; public class Test4 {
public static void main(String[] args) {
/*向上类型转换
BB bb = new BB();
AA aa = bb;
bb.output(); */ //向下类型转换
AA aa = new BB();
BB bb = (BB)aa;
bb.output(); }
} interface AA{
public void output();
}
class BB implements AA{ @Override
public void output() {
System.out.println("BB"); } }
Java SE 第二十二讲----接口interface的更多相关文章
- Java SE 第二十四讲----static与final使用陷阱关键字
1.对于final类型成员变量,一般来说有两种赋值方式: a)在声明final类型的成员变量时就附上初值 package com.cl.staticandfinal; public class Fin ...
- “全栈2019”Java多线程第二十二章:饥饿线程(Starvation)详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java异常第二十二章:try-with-resources语句详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- Java SE 第二十三讲----static关键字and final关键字
1.static关键字 [在二十二讲视频中30分钟开始讲授] 2.static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量:一个对象对该静态成员变量进行了修改,其他 ...
- java se系列(十二)集合
1.集合 1.1.什么是集合 存储对象的容器,面向对象语言对事物的体现,都是以对象的形式来体现的,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式.集合的出现就是为了持有对象.集 ...
- 菜鸡的Java笔记 第二十二 - java 对象多态性
本次只是围绕着多态性的概念来进行讲解,但是所讲解的代码与实际的开发几乎没有关系,而且多态一定是在继承性的基础上才可以操作的, 而本次将使用类继承的关系来描述多态的性质,实际的开发中不会出 ...
- MySQL实战45讲学习笔记:第二十二讲
一.引子 不知道你在实际运维过程中有没有碰到这样的情景:业务高峰期,生产环境的 MySQL 压力太大,没法正常响应,需要短期内.临时性地提升一些性能. 我以前做业务护航的时候,就偶尔会碰上这种场景.用 ...
- Java SE 第十六讲----面向对象特征之继承
1.继承(inheritance):Java是单继承的,意味着一个类只能从另一个类继承(被继承的类叫做父类也叫[基类 baseclass]),继承的类叫做子类,java中的继承使用extends关键字 ...
- Java SE 第十六讲----面向对象特征之多态
1.多态:polymorphism:我们说的子类就是父类(玫瑰是花,男子是人),因此多态的意思就是:父类型的引用可以指向子类的对象 public class PolyTest { public sta ...
随机推荐
- Json Null 不输出
[TestMethod] public void NodeTest() { datanode d = new datanode() ...
- Openjudge计算概论-DNA排序
/*===================================== DNA排序 总时间限制: 1000ms 内存限制: 65536kB 描述 给出一系列基因序列,由A,C,G,T四种字符组 ...
- 解决outlook不能显示鼠标问题
今天发现打开outlook2010后, 没有鼠标显示. 解决方案: Control Panel -> Mouse Settings ->Pointer Options Uncheck th ...
- python3抓取异步百度瀑布流动态图片(二)get、json下载代码讲解
制作解析网址的get def gethtml(url,postdata): header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; ...
- ubuntu 安装 boost
1.tar -zxvf boost_1_43_0.tar.gz 2.cd boost_1_43_0, 执行: sudo ./bootstrap.sh sudo ./bjam install 检验安装 ...
- MyBatis插入多条
<insert id="insertProjectPropertyRelList" parameterType="java.util.List"> ...
- 剑指offer系列20--从上到下打印二叉树
* 20 [题目]从上往下打印出二叉树的每个节点,同层节点从左至右打印. * [思路]从根结点开始,先保存结点,再看根结点的左右结点有没有值. * 有,就将左右值放到集合中: * 根节点输出后,打印根 ...
- bzoj2618: [Cqoi2006]凸多边形
Description 逆时针给出n个凸多边形的顶点坐标,求它们交的面积.例如n=2时,两个凸多边形如下图: 则相交部分的面积为5.233. Input 第一行有一个整数n,表示凸多边形的个数,以下依 ...
- Expecting "jsp:param" standard action with "name" and "value" attributes错误
错误信息如下: Servlet.service() for servlet [jsp] in context with path [/20161017] threw exception [/tag/s ...
- C基础--结构体成员初始化方式
之前在linux内核代码中看到结构体成员成员初始化使用类似于.owner = THIS_MODULE, 不太见过,于是搜了个博客,分享下: 转自:http://www.cnblogs.com/Anke ...