JAVA核心技术I---JAVA基础知识(抽象类和接口)
一:抽象类
(一)定义
类:属性(0或多个)+方法(0或多个)
一个完整(健康)的类:所有的方法都有实现(方法体)
类可以没有方法,但是有方法就肯定要有实现,这才是一个完整的类
一个完整的类才可以被实例化,被new出来
如果一个类暂时有方法未实现,需要被定义为抽象类
(二)实现
抽象类关键字abstract声明
抽象类的组成
–(optional)成员变量,个数不限
–(optional)具体方法,方法有实现,个数不限
–(optional)抽象方法,加abstract关键字,个数不限
1.抽象类
public abstract class Animal {
int number;
public abstract void move();
public abstract void run();
public void say() { //这是区别于接口的地方,在抽象类中可以实现一些方法
System.out.println("I am an animal");
}
}
2.子类继承抽象类,必须全部实现抽象类中的抽象方法,不然还只能是个抽象类
public class LandAnimal extends Animal{
public void move() {
System.out.println("LandAnimal can move");
}
public void run() {
System.out.println("LandAnimal can run");
}
}


(三)总结
抽象类也是类。一个类继承于抽象类,就不能继承于其他的(抽象)类.
子类可以继承于抽象类,但是一定要实现父类们所有abstract的方法。如果不能完全实现,那么子类也必须被定义为抽象类。
只有实现父类(们)的所有抽象方法,才变成完整类。
二:接口
同抽象类相似,不同的是所有的方法都不能实现
(一)定义
如果类的所有方法都没有实现,那么这个类就算是接口interface。
接口不算类,或者说是“特殊”的类。
类只可以继承(extends)一个类,但是可以实现(implements)多个接口,继承和实现可以同时
接口可以继承(多个)接口,没有实现的方法将会叠加
类实现接口,就必须实现所有未实现的方法。如果没有全部实现,那么只能成为一个抽象类。
接口里可以定义变量,但是一般是常量
(二)接口实现
1.接口
public interface Animal {
public void move();
public void run();
}
public interface Food {
public void makefood();
}
2.抽象类:继承于接口,却未全部实现方法
public abstract class LandAnimal implements Animal, Food{ //继承多个接口
public void move() {
System.out.println("LandAnimal can move");
}
public void makefood() {
System.out.println("LandAnimal can be made for food");
}
}
3.子类:实现所以的方法
public class RabbitAnimal extends LandAnimal{
public void run() {
System.out.println("RabbitAnimal can run");
}
}
4.调用
public class AnimalTest {
public static void main(String[] args) {
LandAnimal la=new RabbitAnimal();
la.move();
la.run();
la.makefood();
}
}
LandAnimal can move
RabbitAnimal can run
LandAnimal can be made for food
三:抽象类和接口
抽象类和接口相同点:两者都不能被实例化,不能new操作
抽象类和接口不同点
–抽象类abstract, 接口interfac
–抽象类可以有部分方法实现,接口所有方法不能有实现
–一个类只能继承(extends)一个(抽象)类,实现(implements)多个接口
–接口可以继承(extends)多个接口
–抽象类有构造函数,接口没有构造函数
–抽象类可以有main,也能运行,接口没有main函数
–抽象类方法可以有private/protected, 接口方法都是public
1.接口
public interface Food {
public void makefood();
}
interface Food
public interface Animal {
public void move();
public void run();
}
interface Anima
2.抽象类
public abstract class RiverAnimal implements Animal{
public void move() {
System.out.println("LandAnimal can move");
}
}
abstract class RiverAnimal implements Animal
3.子类
public class fish extends RiverAnimal implements Food{
public void makefood() {
System.out.println("RiverAnimal can be made for food");
}
public void run() {
System.out.println("fishAnimal can run");
}
}
4.实现
public class AnimalTest {
public static void main(String[] args) {
fish ra=new fish();
ra.move();
ra.run();
ra.makefood();
}
}
RiverAnimal can move
fishAnimal can run
RiverAnimal can be made for food
JAVA核心技术I---JAVA基础知识(抽象类和接口)的更多相关文章
- 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承
<Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...
- JAVA基础知识|抽象类与接口类
一.抽象类 抽象类:拥有抽象方法的类就是抽象类,抽象类要使用abstract声明 抽象方法:没有方法体的方法,必须要使用abstract修饰 为什么要使用抽象类,抽象方法? 举例来说,如果你定义了一个 ...
- Java核心技术 卷1 基础知识-第一天
基本数据类型 java是一种强数据类的的语言 共有8种基本数据类型 其中: 整型4种 int(4字节) short(2字节) long(8字节) byte(1字节) java中整型的范围与机器无关 长 ...
- Java基础之抽象类与接口
Java基础之抽象类与接口 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候 ...
- java面向对象(三)之抽象类,接口,向上转型
java类 java类分为普通类和抽象类,接口,上一节我大概讲了java类的一般格式,今天将抽象类和接口.同时讲一下它们是怎样存储的. 最重要的是理解为什么要有抽象和接口,这样学下来你猜不会迷茫,才能 ...
- [Java面试三]JavaWeb基础知识总结.
1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...
- Java中浮点数的基础知识
偶然查看Math.round的JDK public static int round(float a) { if (a != 0x1.fffffep-2f) // greatest float val ...
- Java学习之旅基础知识篇:面向对象之封装、继承及多态
Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...
- java面试题:基础知识
类和对象 Q:讲一下面向对象OOP思想. 面向对象主要是抽象,封装,继承,多态. 多态又分为重载和重写.重载主要是方法参数类型不一样,重写则是方法内容不一样. Q:抽象类和接口有什么区别? 抽象类中可 ...
随机推荐
- 第二十二天 logging hashlib re 模块
今日内容 logging功能完善的日志模块 re正则表达式模块主要处理字符串匹配 查找 搜索给你一个字符串 要从中找到你需要的东西 爬虫大量使用 hashlib hash算法相关的库 算法怎么算不需要 ...
- IDEA 根据 Mysql 自动生成
1 找到 没有的,file--project structure--modules--+--JPA 2 找到如下 添加Mysql连接,记得 Text Connecting一下看看 然后刷新,就可以出 ...
- Codeforces986C AND Graph 【位运算】【dfs】
题目大意: 一张$ m $个编号互异点图,最大不超过$ 2^n $,若两个编号位与为0则连边,问连通块数量. 题目分析: 考虑怎样的两个点会连边.这种说法对于A和B两个点来说,就相当于B在A的0的子集 ...
- springMVC整理05--数据校验、格式化 & 其他注解 & 数据绑定流程
1. 数据校验.数据格式化 参考博客 http://www.importnew.com/19477.html 1.1 数据校验 使用 spring 数据校验,先要导入校验器的 jar: <! ...
- Treasure Hunting HDU - 3468
题意: 输入一个n行m列的图 每次按字母顺序走最短路, 从一个字母走到下一个字母的过程中,只能拿走一个金子,求走完当前图中所有的字母后能拿到的金子的最大值 解析: bfs求最短路 对于一个金子如果 d ...
- bzoj 3631 松鼠的新家 (树链剖分)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3631 思路: 直接用树链剖分求每一次运动,因为这道题只需要区间增添,单点求值,没必要用线段 ...
- Apache 安装及常用参数设置
禁用 selinux setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/confi ...
- 【转】使用STM32F4的CCM内存
我们知道STM32F4当中有个CCM内存,如图所示,这个内存是挂在D总线上直接和内核相连,因此除了内核之外谁都不能访问,那么我们怎么将其利用起来呢?网上这个资料还真的很少,今天我就给大家分享一下,献给 ...
- Docker使用阿里云docker镜像加速
首先进入阿里云docker库首页 https://dev.aliyun.com/ 点击 管理中心 点击 加速器 复制下面的加速地址 进入docker的 Settings 把basic 切换成 adva ...
- Vue中的计算属性与$watch
计算属性:在模板中绑定表达式是非常便利的,但是他们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么vue.js将绑定表达式限制为一个表达式. ...