接口与内部类

1.什么是接口(B)

接口是一种引用数据类型,用interface声明;当出现interface便可判断为接口。

形式:【修饰符】 interface 接口名称(public interface Pepar{ })

接口可声明属性,且属性都默认为static final

1 public interface Paper{
2      public static final String value = "0";
3 
4 }

 

接口也可声明方法,方法都为公共的抽象方法(以下说的接口方法都为抽象方法);接口只定义方法不实现方法所以不存在方法体。

1 public interface Color{
2   public void red();
3 }

接口不能构造方法,也不能创建对象。

一个接口可以继承多个接口,并且继承各个接口的定义的方法

1 public interface CInterface extends AInterface, BInterface {
2       //CInterface接口拥有AIterface、BInerface接口定义的方法
3 }

一个类可以实现多个接口,该类称为实现类;实现一定要实现接口定义的方法。

形式:

 1 public class ImplClassA implements AInterface,BInterface{
 2 
 3     @Override
 4     public void showInfoA() {
 5         System.out.println("实现接口中的showInfoA");
 6     }
 7 
 8     @Override
 9     public void showInfoB() {
10         System.out.println("实现接口中的showInfoB");
11     }
12 }

一个类继承父类的同时,也实现多个接口;形式:先继承,后实现。

形式:

 1 public class ImplClass3 extends AbsClass implements AInterface,BInterface{
 2 
 3     @Override
 4     public void showInfoA() {
 5         // TODO Auto-generated method stub
 6         
 7     }
 8 
 9     @Override
10     public void showInfoB() {
11         // TODO Auto-generated method stub
12         
13     }
14 
15     @Override
16     public void showInfoC() {
17         // TODO Auto-generated method stub
18         
19     }
20 
21 }

特殊情况:

如果一个抽象父类定义了和接口同名的抽象方法,实现类实现的是抽象父类的抽象方法。

 

 1 package cn.interface02;
 2 
 3 public class ImplClass4 extends AbsClass implements CInterface{
 4 
 5     @Override
 6     public void showInfoA() {
 7         // TODO Auto-generated method stub
 8         
 9     }
10 
11     @Override
12     public void showInfoB() {
13         // TODO Auto-generated method stub
14         
15     }
16 
17     @Override
18     public void showInfoC() {
19         // TODO Auto-generated method stub
20         
21     }
22 
23 }

总结:

其实不难发现接口定义的方法与实现类实现接口定义的方法 ,与父类定义的抽象方法和子类重写父类抽象方法类似。

 

 

2.接口的应用(B)

 接口表示一种功能

接口中定义的一些系列方法表示的是一种种的能力。接口让实现类实现这些能力,实现类的能力得到拓展和升级。

实现类根据自身特性实现接口中定义的方法。

 1 package cn.sxt.interface03;
 2 
 3 /**
 4  * 驾驶接口
 5  */
 6 public interface DriveInterface {
 7     /**
 8      * 驾驶的方法
 9      */
10     public void drive();
11 }
package cn.sxt.interface03;public class Student implements DriveInterface{public void learn(String cName) {System.out.println(this.name+"正在学习"+cName);}@Overridepublic void drive() {System.out.println(this.name+"正在驾驶...");}}
 1 package cn.sxt.interface03;
 2 
 3 public class Teacher implements DriveInterface{
 4     /// …
 5 
 6     @Override
 7     public void drive() {
 8         System.out.println(this.name+"正在学习驾驶技术...");
 9         System.out.println(this.name+"很快学会了飙车...");
10     }
11     
12 }

接口的多态

一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(方法)(功能)。

 1 package cn.sxt.interface4;
 2 
 3 public class Test01 {
 4     public static void main(String[] args) {
 5         
 6         // 同一引用类型
 7         USBInterface usbInterface = null;
 8         
 9         // 实例不同
10         usbInterface = new USBFan();
11         // 对同一方法的执行结果不同
12         usbInterface.connect();
13 
14         usbInterface = new USBMouse();
15         usbInterface.connect();
16         
17         usbInterface = new USBDisk();
18         usbInterface.connect();
19     }
20 }

总结:

接口实现多态:接口类型   引用   实现类对象

继承实现多态: 父类类型   引用  子类对象

接口定义的方法被实现类实现时,是通过引用实现类方法,调用接口方法时,执行的是实现类的方法。

接口:has is

继承: is a

3.面向接口编程(A)

接口是一种约定(协议),约定实现类具备什么功能。

接口规范了实现类具备的行为

程序中:面向接口只定义方法没有方法体,不关心实现类如何实现方法,只关心实现类具不具备接口所定义方法的能力。

 1 package cn.sxt.interface06;
 2 
 3 public class Writer {
 4 
 5     // 预留墨盒接口
 6     private InkBoxInterface inkBoxInterface;
 7 
 8     // 预留纸张接口
 9     private PaperInterface paperInterface;
10 
11     public InkBoxInterface getInkBoxInterface() {
12         return inkBoxInterface;
13     }
14 
15     public void setInkBoxInterface(InkBoxInterface inkBoxInterface) {
16         this.inkBoxInterface = inkBoxInterface;
17     }
18 
19     public PaperInterface getPaperInterface() {
20         return paperInterface;
21     }
22 
23     public void setPaperInterface(PaperInterface paperInterface) {
24         this.paperInterface = paperInterface;
25     }
26 
27     public Writer(InkBoxInterface inkBoxInterface, PaperInterface paperInterface) {
28         super();
29         this.inkBoxInterface = inkBoxInterface;
30         this.paperInterface = paperInterface;
31     }
32 
33     public Writer() {
34         super();
35     }
36 
37     public void print(String content) {
38         System.out.println("打印机正在使用"+this.inkBoxInterface.getColor()+"颜色打印"+this.paperInterface.getSize()+"打印"+content);
39     }
40 }

 抽象类和接口的异同比较 (面试常来题)

  • 抽象类和接口都是引用数据类型,他们都不能创建对象。
  • 他们都可以定义抽象方法,都可以实现多态。但是抽象类可以定义非抽象方法,而接口中定义的都是抽象方法。
  • 抽象类和接口都具有传递性。抽象类是单根性(单继承),而接口是多继承。
  • 在概念上,都可以重写抽象方法。子类重写抽象类,实现类实现接口
  • 抽象类和子类解决的是模块内的问题(代码重用,重写,多态)而接口解决的是模块间的问题 => 高内聚,低耦合。接口可以用解耦模块。

4.object(B)

Object 类是所有类的根类。

如果一个类没有显示继承另外一个类,那么该类一定继承于Object。

toString() 返回对象的字符串表示形式

 

 1 public class Test01 {
 2     public static void main(String[] args) {
 3         Object obj = new Object();
 4         // 输出对象时,默认调用toString方法
 5         System.out.println(obj);
 6         // 类型@内存地址
 7         System.out.println(obj.toString());
 8         
 9         
10         Student s1 = new Student("二狗",20);
11         System.out.println(s1);
12     }
13 }

可以通过代码生成器快速生成toString方法。Alt+shift+s->Genrerate toString

 

equals(Object obj) 用于判断两个对象是否相等。

== 比较两个对象的内存地址或基本数据类型的比较,object默认equals实现比较内存地址。

equals:用于比较两个对象的内容(属性)是否相等。

当自定义对象时,要比较自定义对象是否相等,就必须通过equals方法比较两个对象属性值是否相等,那就必须重写Object的equals方法。

 1 @Override
 2     public boolean equals(Object obj) {
 3         if(this == obj) {
 4             return true;
 5         }
 6         
 7         Student s = (Student) obj;
 8         if(this.sid.equals(s.sid) && this.name.equals(s.name) && this.age == s.age) {
 9             return true;
10         }else {
11             return false;
12         }
13     }

 

 

 

 

 

5.内部类(B)

在java中,一个文件可以定义多个类,文件名必须和public 类型的类的类名保持一致。这两个类是平行关系。

在java中,一个类也可以定义在一个类的内部,定义在内部的类称为内部类(inner class),定义在外部的类称为外部类(out class).

1 public class Outer {
2     [修饰符] class Inner{    
3     }
4 }

编译后会出现$符outer$inner.class

 

成员内部

一个内部类作为一个外部类的成员而存在,此时该内部类称为外部类的成员内部类

内部类都用默认修饰符

1 public class Outer {
2     class Inner{    
3     }
4 }

【1】内部创建对象

 1 public class Test01 {
 2     public static void main(String[] args) {
 3         
 4         // 【1】创建外部类对象
 5         Outer outer = new Outer();
 6         // 【2】创建内部类对象
 7         Inner inner = outer.new Inner();
 8         inner.showInfo();
 9     }
10 }

【2】内部可以访问外部私有变量

 1 public class Outer {
 2     
 3     private String name = "Outer";
 4     
 5     class Inner{
 6         
 7         public void showInfo() {
 8             System.out.println(name);
 9         }
10         
11     }
12 }

特殊情况:外部类和内部类的变量同名

 1 public class Outer {
 2     
 3     private String name = "Outer";
 4     
 5     class Inner{
 6         
 7         private String name = "Inner";
 8         
 9         public void showInfo() {
10             // String name = "show info";
11             
12             // 访问外部类的私有成员
13             System.out.println(this.name);
14             
15             // 访问外部类的私有成员
16             System.out.println(Outer.this.name);
17             
18         }
19     }
20 }

 

转载于:https://www.cnblogs.com/xfbb/p/10771024.html

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

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

相关文章

深度学习为何泛化的那么好?秘密或许隐藏在内核机中

来源:AI科技评论编译:杏花编辑 :青暮在机器学习领域,人工神经网络逐年扩大规模,并取得了巨大成功,但同时它也制造了一个概念性难题。当一个名为 AlexNet网络在2012年赢得年度图像识别比赛时,大约…

【计算机网络复习】1.1.4 时延、时延带宽积、RRT和利用率

时延、时延带宽积、RRT和利用率一、时延二、时延带宽积三、往返时延RTT一、时延 传输时延(发送时延):数据从结点发送到链路上的时间 传输时延 数据长度/网络带宽,由网络带宽、数据长度决定 传播时延:信号从链路的一端…

华为汪涛:无线网络未来十年十大趋势

来源:通信产业网2021全球移动宽带论坛(Global MBB Forum)期间,华为常务董事、ICT基础设施业务管理委员会主任汪涛发表了题为“走向智能世界2030,无线网络未来十年十大趋势”的主题演讲。华为常务董事、ICT基础设施业务…

【计算机网络复习】1.2.1 分层结构、协议、接口、服务

分层结构、协议、接口、服务一、 分层结构一、 分层结构 分层的基本原则 1、各层之间相互独立,每层只实现一种相对独立的功能。 2、每层之间界面自然清晰,易于理解,相互交流尽可能少。 3、结构上可分隔开。每层都采用最合适的技术来实现。…

22000字深入研究消费电子光学传感器行业

来源:华创证券、驭势资本研究所消费电子是传感器最重要的应用市场,据研究机构的调研数据显示,占传感器50%左右份额。本文主要基于3D光学传感器产业研究,同时涉及TOF飞行时间传感器、红外传感器等应用于消费电子设备上的光学传感器…

【计算机网络复习】1.2.2 OSI参考模型

OSI参考模型一、七层OSI参考模型(法定标准)1.1 ISO/OSI参考模型 —— 怎么来的?1.2 ISO/OSI参考模型1.2.1 通信过程1.2.2 数据封装一、七层OSI参考模型(法定标准) 1.1 ISO/OSI参考模型 —— 怎么来的? 为…

当世界模型被用于sim2real:机器人通过视觉想象和交互尝试来学习

来源:AI科技评论 编译:杏花编辑:青暮人类是如何掌握这么多技能的呢?好吧,最初我们并非如此,但从婴儿时期开始,我们通过自监督发觉并练习越来越复杂的技能。但这种自监督并不是随机的——儿童发展…

【计算机网络复习】1.2.4 TCP/IP参考模型和5层参考模型

TCP/IP参考模型和5层参考模型一、OSI参考模型与TCP/IP参考模型二、5层参考模型一、OSI参考模型与TCP/IP参考模型 相同点: 1、都分层 2、基于独立的协议栈的概念 3、可以实现异构网络互联 不同点 1、OSI定义三点:服务、协议、接口 2、OSI先出现&…

量子物理学家:如果宇宙中所有物体突然消失,会剩下一个「空宇宙」吗?

文章来源:TNW如果量子物理学家能够证明现实世界的一切都是不真实的,会发生什么?你愿意接受这个假设吗?如果说,此时此刻你正在看的这篇文章,其实并不存在,你会不会觉得这句话是在胡说&#xff1f…

为什么数学的用途这么大?

来源:遇见数学翻译:萧福坤译自 Science Digest, August 1985原文:http://210.60.224.4/ct/content/1986/00050197/0008.htm我的父亲是一位物理学家,所以我从小耳濡目染,当他与同事讨论问题时,我坐在桌旁,「…

【计算机网络复习 物理层】2.1.2 数据通信基础知识

数据通信基础知识一、典型的数据通信模型二、数据通信相关术语三、三种通信方式四、两种数据传输方式一、典型的数据通信模型 二、数据通信相关术语 通信的目的是传送消息。 数据:传送信息的实体,通常是有意义的符号序列。 信号:数据的电气…

无线网络未来十年十大产业趋势

来源:华为编辑:蒲蒲5G的发展速度非常之快,截止2021年9月,全球已经部署了有176张5G商用网络,超过150万5G站点。5.2亿5G用户的感官体验,也迎来全面升级焕新:高清视频的时长占比提升到了80%;流行的短视频APP已…

git入门(廖雪峰老师)

根据廖雪峰老师的git教程进行学习总结; 1、之前上班用的都是svn进行管理,那么svn和git有什么区别呢? svn是集中式的版本控制系统,而git是分布式版本控制系统,那么集中式和分布式版本控制系统有什么区别呢? …

【计算机网络复习 物理层】2.1.3 码元、波特、速率、带宽

码元、波特、速率、带宽一、码元二、速率一、码元 码元是指用一个固定时长的信号波形(数字脉冲),代表不同离散值的基本波形,是数字通信中数字信号的计量单位,这个时长内的信号称为k进制码元,而该时长称为码…

智慧竞赛正在升温

来源:混沌巡洋舰原文:摘自 edge 系列图书 《那些最重要的科学新发现》迈克斯泰格马克(MaxTegmark):麻省理工学院物理系终身教授,平行宇宙理论研究专家,未来生命研究所创始人;著有《生命3.0》《穿越平行宇宙…

linux基础知识——CPU相关知识

1.CPU处理程序过程 \qquad在存储介质中,从下至上是进程的时间加载的先后顺序,也是存储空间大小的顺序。 2.MMU(内存管理单元) \qquadMMU是位于CPU内部的一个物理器件。在程序运行时,会产生进程,同时产生虚拟内存空间&#xff0c…

【计算机网络复习 物理层】2.1.4 奈氏准则和香农定理

奈氏准则和香农定理一、失真1.1 失真的一种现象 —— 码间串扰二、奈氏准则三、香农定理四、如何区分一、失真 影响失真程度的因素:1、码元传输速率 2、信号传输距离 3、噪声干扰 4、传输媒体质量 1.1 失真的一种现象 —— 码间串扰 码间串扰:接收端收到…

虚拟在左,真实在右:德国学者用AI合成一亿像素逼真3D图像,可任意旋转

来源:AI科技评论编译:杏花编辑:青暮近日,来自德国埃尔兰根-纽伦堡大学的学者提出了一种新颖的神经网络方法,用于3D图像的场景细化和新视图合成。只需要输入点云和相机参数的初始估计,就可以输出由任意相机角度合成的图像&#xff…

phpmyadmin登陆错误:The requested URL /phpmyadmin was not found on this serve

解决方法: 首先,重新安装apache2: sudo dpkg-reconfigure -plow phpmyadmin 配置时记得选择apache2 如果仍然无法登陆,再对phpmyadmin和apache服务器软链接 sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/ssites-enabled/…