java抽象类详解
前言
在没讲抽象类之前 我们先来看看 final关键字
final 修饰符 可以修饰 类、属性、方法
修饰类时 表示该类不能被继承 其他特征 跟普通的类一样
修饰 属性时 表示 改属性不能改变 并且 必须赋初始值
修饰方法时 表示该方法不能被重写
什么是抽象类?
为什么要使用抽象类?
当我们在写继承时 一般实现时用不到父类 不需要实例化对象 这个时候我们就把这个父类定义为抽象类
也就是说抽象类本身没有实际意义 但是在编写继承或者多态程序时 又不得不定义父类 所有这个时候我们就把父类定义为抽象类俗称抽象父类
抽象类是用abstract 来修饰 抽象类的特点就是不能实例化对象 但是抽象类跟其他类一样 可以被继承
什么是抽象方法?
抽象类中的方法一般在继承和多态时 抽象类都不能创建对象 所有抽象类里面的方法也就没多大用处 但是 抽象类中不可能不定义方法 这个时候我们就将该方法定义为抽象方法
抽象方法的三个特征
1、抽象方法没有方法体
2、抽象方法必须存在于抽象类中
3、必须在子类中重写父类中的抽象方法
方法重写的几大注意事项:
1、子类中方法的名字必须跟父类方法的名字一样
2、子类中方法的参数必须跟父类中的方法参数一样
3、子类中方法的返回值要么跟父类的一样 要么是父类返回值类型的子类
4、子类中的访问权限必须大于等于父类中的访问权限
下面来看一个例子:
abstract class Pet
{
public abstract void eat();
} class Dog extends Pet
{
public void eat(){
System.out.println("狗吃骨头");
}
} class Cat extends Pet
{
public void eat(){
System.out.println("猫吃鱼");
}
} class Nature
{
public void law(Pet p){
p.eat();
}
} class TestAb
{
public static void main(String[] args)
{
Nature nature = new Nature();
nature.law(new Dog());
nature.law(new Cat());
}
}
接口
接口也是多态的另一种表现形式
语法 interface 接口名{}
需要注意的是接口跟抽象类中的属性和方法有以下区别:
1、接口中的属性默认必须修饰符为public、static、final 缺哪个jvm会自动补哪个
2、 接口中没有构造方法 不能被实例化 抽象类也是不能被实例化
3、接口中的所有方法必须是public、abstract 缺少哪个补哪个
4、接口之间可以多继承
5、一个类可以实现多个接口
6、接口没有继承object类
java抽象类详解的更多相关文章
- Java 抽象类详解
在<Java中的抽象方法和接口>中,介绍了抽象方法与接口,以及做了简单的比较. 这里我想详细探讨下抽象类. 一.抽象类的定义 被关键字“abstract”修饰的类,为抽象类.(而且,abx ...
- Java抽象类 详解
一.抽象类的基本概念 普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法.普通方法.static方法.常量和变量等内容.而抽象类是指在普通类的结构里面增加抽象方法的组成 ...
- java关键字(详解)
目录 1. 基本类型 1) boolean 布尔型 2) byte 字节型 3) char 字符型 4) double 双精度 5) float 浮点 6) int 整型 7) long 长整型 8) ...
- android java 设计模式详解 Demo
android java 设计模式详解 最近看了一篇设计模式的文章,深得体会,在此基础我将每种设计模式的案例都写成Demo的形式,方便读者研究学习, 首先先将文章分享给大家: 设计模式(Design ...
- Java接口 详解(二)
上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用—工厂设计模式(Factory) 我们先看一个范例: package com. ...
- Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
本文非常详尽地介绍了Java中的三个集合类 ArrayList,Vector与Stack <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整 ...
- 「万字图文」史上最姨母级Java继承详解
摘要:继承是面向对象软件技术中的一个概念.它使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用. 本文分享自华为云社区<「万字图文」史上最姨母级Java继承详解丨[奔跑吧!JAVA] ...
- Java 集合详解 | 一篇文章解决Java 三大集合
更好阅读体验:Java 集合详解 | 一篇文章搞定Java 三大集合 好看的皮囊像是一个个容器,有趣的灵魂像是容器里的数据.接下来讲解Java集合数据容器. 文章篇幅有点长,还请耐心阅读.如只是为了解 ...
- Java内部类详解
Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...
随机推荐
- logging模块--日志文件
初级的使用配置模式类似与print 默认打印waring等级及以上--通过更改等级来测试代码 logging.debug("debug no china") #调试模式 loggi ...
- Linux inode与文件系统关系
inode只有在linux文件系统的概念(ext3,ext4) .inode节点数量与文件存储的关系. 二.在文件系统初始化时设置合适的节点数量. linux服务器在存储文件小而数量多的情况下,需要考 ...
- MySQL--详细查询操作(单表记录查询、多表记录查询(连表查询)、子查询)
一.单表查询 1.完整的语法顺序(可以不写完整,其次顺序要对) (不分组,且当前表使用聚合函数: 当前表为一组,显示统计结果 ) select distinct [*,查询字段1,查询字段2,表达式, ...
- FastCGI sent in stderr: "PHP Warning: simplexml_load_string(): Entity: line 1: parser error : Start tag expected, '<' not found in
2018-4-16 17:59:03 星期一 1. 发送带有xml参数的请求时如果是用php curl, 需要将数组形式的post data 用 http_build_query() 转换 2. 接收 ...
- jqGrid后台交互样例
schoolManageGrid = $("#jqGrid").jqGrid({ url : ctx.path+"/api/school/querySchools&quo ...
- 【进阶3-2期】JavaScript深入之重新认识箭头函数的this(转)
这是我在公众号(高级前端进阶)看到的文章,现在做笔记 https://github.com/yygmind/blog/issues/21 上篇文章详细的分析了各种this的情况,看过之后对this的概 ...
- iOS -- Effective Objective-C 阅读笔记 (3)
1: 理解 属性 的概念 属性会自动生成存取方法, 可以利用点语法调用, 若不想编译器自动合成存取方法, 可以自己实现, 还有另外一种方法, 就是使用 @dynamic 关键字, 它会告诉编译器, ...
- Confluence 6 上传站点图标后重置你的配色方案
当你上传一个站点标识图片后,Confluence 会根据你上传的图片文件自动侦测使用的颜色,并为你设置自动配色方案. 你可以按照上面描述的方法修改色彩配色方案,或者你也可以重置配色方案为默认的配色方案 ...
- windows下如何安装pip以及如何查看pip是否已经安装成功
最近刚学习python,发现很多关于安装以及查看pip是否安装成的例子都比较老,不太适合于现在(python 3.6 )因此,下一个入门级别的教程. 0:首先如何安装python我就不做介绍了. 1: ...
- Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器)
Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器) 1.初始函数 2.函数嵌套及作用域 3.装饰器 4.迭代器和生成器 6.内置函数 7.递归函数 8.匿名函数