JavaSE复习日记 : 抽象类
/*
* 抽象类
* 抽象:
* 面向对象的三大核心思想;
* 封装: 封装,ppp是封装的一部分
* 继承;
* 多态: 父类的引用指向子类的对象
* 引用: 是指一个引用型变量
* 有哪些变量?
* 成员变量;
* 构造方法的局部变量;
* 普通方法的局部变量;
* 立马声明立马使用的变量;
* 静态变量;
* 什么是抽象类?
* 就是用abstract关键字修饰的类就叫抽象类;
* 什么是抽象方法?
* 没有方法体的方法叫抽象方法,连{}都没有;抽象方法必须在修饰符列表中加上abstract这个关键字修饰;
* 继承于抽象类的类:
* 必须全部实现抽象类中的方法(就是加上方法体大括号),如果没有全部实现,就必须加上abstract修饰,即他也是个抽象类;
* 抽象类和抽象方法的关系:
* 含有抽象方法的类一定是抽象类;
* 抽象类却不一定有抽象方法;
* 抽象类没有抽象方法的目的:
* 为了让这个抽象类不能被实例化;
* 抽象方法的性质:
* 1 抽象方法不能被实例化(还有一种方法也不能让类实例化,那就是构造方法私有化,private)
* 2 虽然抽象方法不能被实例化,但是仍然有构造方法,这个是让子类创建对象用的(构造方法不能被继承,用super())
* 3 抽象类中不一定有抽象方法,但是抽象方法必须写在抽象类中
* 4 抽象类的继承类,必须把所有的抽象方法实现(全部需要加上方法体),否则子类还是个抽象类,需要用abstract修饰,也就是子类也不能直接被实例化
*
* 注意:抽象类是不能使用final修饰的,因为抽象类的目的就是为了继承,而final修饰的类不能被继承
* 抽象方法可以用final修饰吗?
* abstract和final不能同时出现,抽象方法不能用final修饰,因为抽象方法的目的是被覆写,而final修饰的方法不能被覆写;
*
* 还有就是,子类必须实现抽象类的所有的"抽象"方法才行,而不是用abstract修饰的方法呢?
* 关于这个,代码中可以看出来;
*
*/ public class JavaSE{
public static void main(String[] args){
A a = new C();//这里是多态,用于父类引用指向子类对象
a.move();
a.eat();
//再写一个
//A o = new A();//这里是会报错的,我上面写过,抽象类是无法被实例化的,A是抽象类吧,当然不能被实例化;
}
} abstract class A{//抽象类吧
public void eat(){//这个不是抽象方法吧,需要一定被覆写(实现)吗?
System.out.println( "这是一个抽象类" );
} public abstract void move();//注意:抽象方法是没有方法体的; A(){
System.out.println( "A的构造方法" );
}
} abstract class B extends A{//B没有覆盖(或者说实现)A里面的move()方法,所以他依旧是一个抽象类,需要加上abstract;
B(){
System.out.println( "B的构造方法" );
}
} class C extends B{//C实现了A里面的所有方法吧,所以不用abstract修饰;
C(){
super();
} public void move(){//A中的move()方法被覆写了
System.out.println( "C不是抽象类" );
}
}
JavaSE复习日记 : 抽象类的更多相关文章
- JavaSE复习日记 : 接口
/* * 接口 * 引用数据类型: * 类,接口,数组; * * 接口是一种引用数据类型,可以看作是一个特殊的类,它存在的目的是为了解决没有多重继承引起的功能弱的问题而设计的,一个类只能有一个父类,但 ...
- JavaSE复习日记 : 算是个小前言吧
/* * Java也学了好久了,抽个时间整理了一下课堂笔记,也有些是我刚开始学会犯的一些错误.在这里浅谈一下JavaSE的基础内容,对我来说也是一种不错的复习方式. * * 那好,对于初学者来说,学习 ...
- JavaSE复习日记 : 方法的调用和方法的重载
/* * 方法的调用和方法重载 */ /* * 什么是方法? * 方法就是一个有名字的代码段; * 方法的调用: * 在方法里调用另外一个方法里面的东西就是方法调用; * 或者可以认为"另外 ...
- JavaSE复习日记 : 循环终止语句(break/break outerFor/continue)
最近没网,但攒了几天的博客,这次逮到机会发博客,直接三篇走起; /* * 循环终止语句: break/ break outerFor/ continue */ /* * break语句 * 1. 用于 ...
- JavaSE复习日记 : 继承关系和super关键字以及继承关系中方法的覆写
/* * 类的继承和super关键字 * * 软件开发的三大目的: * 可拓展性; * 可维护性; * 可重用性; * * 这里单说下可重用性这一项: * 为了代码复用,复用方式有: * 函数的调用复 ...
- JavaSE复习日记 : java包机制
这里是第一个文件,命名为JavaSE_01.java,我在这个文件里面声明了一个m1()方法,通过包机制,我将在另外一个文件夹里访问这个文件里的东西,确切的说是访问这个文件生成的一个class文件; ...
- JavaSE复习日记 : 实例化对象/构造方法和this关键字
/* * 实例化对象/对象的构造方法/this关键字 */ /* * 实例化对象 * * 就是实例化某一个类; * 从不同角度去理解的话就是: * 1. 从人的认知角度: * 就是具体化某个东西; * ...
- JavaSE复习日记 : 递归函数
/* * 递归函数 * 什么是递归? * 在一个方法的内部,对自身进行调用,又叫做递归调用 * * 递归和循环的编写都包括三部分: * 1. 初始值; * 2. 终止条件; * 3. 前进步长; * ...
- JavaSE复习日记 : 循环语句(for/while/do while)
/* * 循环语句(for循环,while和do while循环) */ /* * for循环语句 * * for循环语法: * for (表达式1;表达式2;表达式3 ){ * java语句 * } ...
随机推荐
- html表格单元格设置背景颜色
- 开发该选择Blocks还是Delegates(转)
原文链接:http://blog.stablekernel.com/blocks-or-delegates/ By Joe Conway,CEO | Jul 11,2013 11:29:00 AM 有 ...
- Jackson 框架,轻易转换JSON【转】
Jackson 框架,轻易转换JSON Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在 ...
- 移动前端不得不了解的HTML5 head 头标签(2016最新版)
小编推荐:掘金是一个高质量的技术社区,从 ECMAScript 6 到 Vue.js,性能优化到开源类库,让你不错过前端开发的每一个技术干货.各大应用市场搜索「掘金」即可下载APP,技术干货尽在掌握. ...
- OCP-1Z0-053-V12.02-501题 【转】
http://blog.csdn.net/rlhua/article/details/12225237 501.Note the output of the following query; SQL& ...
- ios 中的构造方法(二)
在之前有简单介绍了构造方法的结构,以及构造方法的作用,那么我们现在来讨论一下: 对象的创建分为两步:+ alloc 分配内存空间和 -init 进行初始化 那么在继承自 NSObject 的类当中,我 ...
- mysql 索引创建规则
1.表的主键.外键必须有索引:2.数据量超过300的表应该有索引: 3.经常与其他表进行连接的表,在连接字段上应该建立索引: 4.经常出现在Where子句中的字段,特别是大表的字段,应该建立索引: 5 ...
- Python进阶之闭包
闭包 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB","S ...
- 安装虚拟机VMWare时出现1021错误的解决办法
今天安装虚拟机(VMWare Workstation9.0),中途老是出现错误:Failed to create the requested registry key key installer er ...
- 深度解析Linux通过日志反查入侵
有一个朋友的服务器发现有入侵的痕迹后来处理解决但是由于对方把日志都清理了无疑给排查工作增加了许多难度.刚好手里有些资料我就整理整理贴出来分享一下.其实日志的作用是非常大的.学会使用通过日志来排查解决我 ...