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 ...
随机推荐
- CSS3盒模型之box-sizing
这些天在做一个手机端的页面,遇到了一些问题!首当其冲的就是盒子的溢出问题!大家都知道,手机的尺寸各异,各种型号的手机多得能闪瞎你们的眼睛,为了能 让这些设置更好的浏览我们的页面,我们已经不能固定页面的 ...
- linux安全
http://drops.wooyun.org/ 最专业的安全知识分享平台 http://www.freebuf.com/ 关注黑客与极客 http://book.beifabook.com/prod ...
- 使用SQL字符串反转函数REVERSE巧妙实现lastindexof功能
要实现一个简单的业务: 使用SQL脚本获取字符串'large/020700/61970b0101.jpg' 中的'61970b0101.jpg'部分. 先想到的是C#中的lastindexof,但是S ...
- ExtJs学习笔记之Window组件
Window窗体组件 window是一个指定的打算作为一个应用程序窗口的面板,默认窗口是浮动的,resizable, 并且draggable,默认的,窗体靠document.body呈现. 1.示例: ...
- 用java给html文件添加必要的控制html代码片
这个需求,我估计很多时候都不会用到,但是,我们目前在做一个CMS的系统,在创建页面的时候,需要控制页面各个板块显示的内容来源,这个不是关键,关键是页面内容配置完毕后,如何提交内容,也就是说如何和后台系 ...
- 轻量级开源内存数据库SQLite性能测试
[IT168 专稿]SQLite是一款轻型的数据库,它占用资源非常的低,同时能够跟很多程序语言相结合,但是支持的SQL语句不会逊色于其他开源数据库.它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品 ...
- bzoj3135: [Baltic2013]pipesd
Description 有n个水库,m条管道.Jester会在某些管道中间凿开一个洞,让水流出来或者用水泵把水打进去.保证这个流速是偶数.对于一条管道(u, v),如果在中间凿开了一个洞让水流出来,流 ...
- SQL执行效率和性能测试方法
对于做管理系统和分析系统的程序员,复杂SQL语句是不可避免的,面对海量数据,有时候经过优化的某一条语句,可以提高执行效率和整体运行性能.如何选择SQL语句,本文提供了两种方法,分别对多条SQL进行量化 ...
- 腾讯首度公开S级手游品质管理方法
weimjsam 引言 在最新的手游市场占有率统计中,腾讯游戏稳稳占据一半江山,目前仍以每月一到两款的速度推出新品,在如此复杂多变.响应要求极高的市场环境下,能持续推出高质量产品并保持高效迭代更新 ...
- 打开SDK Manager检查Android SDK下载和更新失败的解决方法
[故障描述] 打开SDK Manager检查Android SDK状况,出现以下情况: Failed to fetch URL https://dl-ssl.google.com/android/r ...