抽象类 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抽象类与接口的区别
很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. ...
随机推荐
- ROS与树莓派的结合
从零开始学树莓派和ROS 今天写下自己的第一篇博客,记录一下自己的学习历程和学习过程中碰到的各种小问题,供同道者参阅和自己以后回顾用 ,水平不高,我就放开手写吧,反正也不会有人看. 我现在在做毕业设计 ...
- 会话技术cookie与session
目录 会话技术cookie 会话技术 cookie 服务器怎样把Cookie写 给客户端 服务器如何获取客户端携带的cookie session session简介 Session如何办到在一个ser ...
- NLP 文本预处理
1.不同类别文本量统计,类别不平衡差异 2.文本长度统计 3.文本处理,比如文本语料中简体与繁体共存,这会加大模型的学习难度.因此,他们对数据进行繁体转简体的处理. 同时,过滤掉了对分类没有任何作用的 ...
- Oracle的大表,小表与全表扫描
大小表区分按照数据量的大小区分: 通常对于小表,Oracle建议通过全表扫描进行数据访问,对于大表则应该通过索引以加快数据查询,当然如果查询要求返回表中大部分或者全部数据,那么全表扫描可能仍然是最好的 ...
- 创建Bitmap之Bitmap静态方法使用示例
package com.loaderman.customviewdemo; import android.app.Activity; import android.content.Intent; im ...
- Django开发简单采集用户浏览器信息的小功能
Django开发简单采集用户浏览器信息的小功能 Centos环境准备 yum install –y python-pip export http_proxy=http://10.11.0.148:80 ...
- initGLWidgetAndViewer
void initGLWidgetAndViewer() { osgViewer::ViewerBase::ThreadingModel threadingModel = osgViewer::Vie ...
- 最简易的python web框架的后端实现
1.源代码 #!/usr/bin/python #encoding=utf-8 from flask import json, Flask, request app = Flask(__name__) ...
- json简单案例
1.Group类 import java.util.ArrayList; import java.util.List; class Group{ private int id; private Str ...
- python2.6.6升级python2.7.14
Centos 6.8系统镜像默认安装的 python 环境是 2.6.6,线上需求需要升级到 2.7.14 版本,网上找了相关资料,升级 python 版本比较容易,但 yum/pip 等命令的使用也 ...