抽象类 and 接口
目录
抽象类
一个类,如果有抽象方法(没有方法体),则该类必须被限定为抽象类(abstract);当然,我们也可以创造出一个没有任何抽象方法的抽象类,仅仅是我们不想它产生对象;
抽象类中,依然是有构造器的,只是我们不能创造对象 ;但是,它跟普通类并没有多大区别,比如,抽象类可以有静态方法,我们也可以直接通过类名使用它的静态方法 ;
跟普通类,其实没差,就多了一项:可以用抽象方法 ;
抽象类的域和方法的权限;
上文讲了,其实抽象类跟普通类,没差,就多了一项:可以用抽象方法 ;
那么,抽象类的域和方法的权限,基本 就像普通类那样,根本就没啥特别的,没有啥 默认权限,不像下面的接口那样,总有一些默认的权限,烦的一比 !
唯一需要注意的,就是有的权限不能和 abstract 一起用;
private因为抽象方法需要被子类重写,而定义为私有,子类访问不到,将无法重写。static因为定义为static可以通过类名直接调用该方法,而抽象方法连方法体都不存在,更谈不上被调用执行了。final因为final修饰的方法只能被继承,不能被覆盖,而抽象方法必须被覆盖。- 我们发现 ,限定都在
abstract上,而abstract只能修饰方法,不能修饰 字段,因此,抽象类域的权限,完全跟普通类一样;
只要把上面的几点想明白,就不用去死记那些权限 ;
接口
抽象类,是可以部分抽象;那接口就是完全抽象,不允许提供任何方法体 ;
一个类实现了某个接口,是允许向上转型为接口类型的,这样,就可以实现 java 的 多继承 了, 因为,java 里面虽然不能直接多继承,但是可以通过实现多个接口,达到多继承的目的 ;
由于接口,本身就是需要类来实现的;多个类,可以实现同一个接口,因此接口可以看做是类与类之间建立的协议 ;
接口中的域和方法的权限;
接口中可以包含域;所有的域都是隐式的被指定为 public、static、final ;
而接口中的方法,默认是 public、abstract 权限的;
并且由于接口中没有方法体,方法都需要类来实现,因此,接口中的方法,不能是 final 权限,因为 final 权限,代表不可以覆盖,而接口中方法,必须覆盖 ;
而接口中东西,都是需要被其他类访问到,因此,不能有 private ;
算了,记住好了 ;
接口本身自己,有两种修饰权限:可以在前面加上 public,那么就可以跨包访问;如果不加 public,则为包访问权限 ;
对了,接口中不能有 空白final ;
实现多个接口
实现多个接口的时候,可以向上转型为其中任意一个接口 ,给我们很大的灵活性 ;
实现多接口的时候,当多个接口中有相同方法签名的方法时,实现类只需要 实现一个即可;
这样有一个小问题,就是实现多个接口的时候,如果有方法的方法签名一样,但是返回值不同;是无法直接区分这样的情况的,需要使用一定的技巧,内部类 来完成这样的操作 ;
接口继承
在接口继承体系中,一样的方法,只看做一个 ;
接口嵌套
类中嵌套接口,把它当做类的成员变量即可,访问权限跟普通成员变量一致 ;
当接口被修饰为
private的时候,该接口只能在本类中实现,并且实现的类,只能本在类中使用 ;public class Test1 {
// 修饰为 private
private interface MyTest{
void print();
} // 不能在外部实现该接口
class MyTestImpl implements MyTest{ @Override
public void print() {
System.out.println("aha !");
}
} @Test
public void test() {
new MyTestImpl().print();
}
}接口与接口之间嵌套
一个类实现的接口, 假如这个接口中嵌套了其他接口,
嵌套的接口中的方法是不需要实现的 ;public interface BB { public interface AA{
void mmm() ;
} void sss();
} ------------------------------------------- class BBimpl implements BB{ @Override
public void sss() {
System.out.println("ssss");
}
}
抽象类 and 接口的更多相关文章
- 抽象类 VS 接口
引言 接口和抽象类是面向对象编程(OOP, Object Oriented programming)中两个绕不开的概念,二者相似而又有所不同.接下来,我们来了解二者的概念并比较它们的异同. 什么是抽象 ...
- java抽象类和接口
面向对象设计过程中重要的一点是如何进行抽象,即把"问题空间"中的元素与"方案空间"中的元素建立理想的一对一的映射关系.抽象类和接口便是抽象过程中的产物. ...
- php中抽象类与接口的概念以及区别
php里面的接口类,抽象类到底有什么用呢? 刚接触php的时候,觉得这个东西没什么用,其实这些东西还是有一定的作用的,下面我就简单的说说. 1.php 接口类:interface 其实他们的作用很简单 ...
- Java 抽象类与接口
接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是 Java 语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予 Java 强大的面向对象的能力.他们两者之间对 ...
- 浅谈我对C#中抽象类与接口的理解
C#中的抽象类与接口有些相似,初学者很容易混淆,今天就让我来谈谈对二者的理解. 首先我们得明确二者的含义,分述如下: 如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个 ...
- Atitit 深入理解抽象类与接口 attilax总结
Atitit 深入理解抽象类与接口 attilax总结 1.1. 主要区别接口侧重于动作抽象..抽象类是属性名词抽象..1 1.2. 抽象层次类>>抽象类>>接口1 1.3. ...
- luogg_java学习_07_抽象类_接口_多态学习总结
这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 抽象 一种专门用来做父类,被继承的. (模板) 格式: abs ...
- PHP中抽象类,接口定义
这里先介绍接口,因为在我最近看的好几本php工具书中都没有提到抽象类. 本人也觉得,在理解了接口后抽象类也非常好理解. 例子代码随便写了一下.例子代码是很ok的,测试过了不会报错,懒得看代码的筒靴们看 ...
- 0026 Java学习笔记-面向对象-抽象类、接口
抽象方法与抽象类 抽象方法用abstract修饰,没有方法体部分,连花括号都不能有: 抽象方法和抽象类都用abstract修饰 包含抽象方法的类一定是抽象类:但不包含抽象方法的类也可以是抽象类 不能创 ...
- Java抽象类与接口的区别
很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. ...
随机推荐
- 在vultr中安装k8s测试
vultr 安装k8s *** 如果国内访问 k8s.gcr.io 很慢,或者无法访问 *** 在应用yaml文件创建资源时,将文件中镜像地址进行内容替换即可: 将k8s.gcr.io替换为 regi ...
- 一些scala的操作
Scala获取当前目录下所有文件 import java.io.File //获取目录下的所有文件,当前项目目录输入new File(".") def getFiles1(dir: ...
- 将制定目录家到系统PATH环境变量中
1.打开系统文件sudo vim/etc/profile,请输入root密码 2.在appendpath '/usr/local/sbin' appendpath '/usr/local/bin' a ...
- 浅谈无旋treap(fhq_treap)
一.简介 无旋Treap(fhq_treap),是一种不用旋转的treap,其代码复杂度不高,应用范围广(能代替普通treap和splay的所有功能),是一种极其强大的平衡树. 无旋Treap是一个叫 ...
- 隐藏tr
<tr id="yinchang" style="display: none"></tr> $("#yinchang& ...
- 对请求数据的格式化 方案 Spring Cloud Gateway features:
对请求数据的格式化 例如 {body:{}}--->{data:{}} 执行阶段概念 · OpenResty最佳实践 · 看云 https://www.kancloud.cn/kancloud/ ...
- ArcGIS 10.5 tensorflow安装日记
ArcGIS 10.5 tensorflow安装日记 商务科技合作:向日葵,135-4855__4328,xiexiaokui#qq.com Datetime: 2019年5月27日星期一 Os: w ...
- word中英文双引号的样式区分与替换技巧
https://jingyan.baidu.com/article/3f16e003147ea42590c10349.html 场景:一篇word文档中,想要全选更改字体,使得中文全部为“宋体”,英文 ...
- sql中union,union all没有兼顾到的内容
今日遇到一个问题,两张表联合取交集去重,但是需要把某一字段相同的也给去掉 union all : 联合,没有取交集 union :联合取交集(仅针对所有字段相同的去重) 解决方案:将联合的数据作为一个 ...
- 【转载】 迁移学习(Transfer learning),多任务学习(Multitask learning)和端到端学习(End-to-end deep learning)
--------------------- 作者:bestrivern 来源:CSDN 原文:https://blog.csdn.net/bestrivern/article/details/8700 ...