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系列教程--DOCTYPE a area
<!DOCTYPE>标签:<!DOCTYPE> 声明不是 HTML 标签:它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令.在 HTML 4.01 中,& ...
- 2014.12.06 ASP.NET 三级联动,添加员工,修改员工
(一)三级联动 要实现的效果: 代码: MyDBDataContext context = new MyDBDataContext(); protected void Page_Load(object ...
- iOS多线程的基本使用
一.NSThread: 程序就是一段代码,是静态的概念 进程是运行起来的程序,是动态的概念,进程需要占内存空间 线程是进程的基本单位,一个进程至少有一个线程,iOS程序默认有一个主线程,用来显示和操作 ...
- (跨平台)cocos2d-x C++ or Object-C(前端)调用C# webservices(后台),实现交叉编译到Android/IOS/WinPhone等移动终端设备
1.2014年4月2号算是正式找到自己的实习工作-杭州美迪软件有限公司(移动物联事业部)合作于:四川管家婆总部移动终端代理,由于在校选编程专业语言C#和在浙大网新培训课程(C#.Asp.net开发)缘 ...
- BZOJ 4016: [FJOI2014]最短路径树问题( 最短路 + 点分治 )
先跑出最短路的图, 然后对于每个点按照序号从小到大访问孩子, 就可以搞出符合题目的树了. 然后就是经典的点分治做法了. 时间复杂度O(M log N + N log N) -------------- ...
- HTTP性能测试
HTTP性能测试 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB",& ...
- Python进阶之闭包
闭包 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB","S ...
- javscript上传图片前预览的方法setPreViewImage()
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- PyCharm 2016.1 for Mac 激活方法分享
内容如题,需要就参考一下,不需要请绕行!内容来自墙外我只是搬运工! 简单介绍一下步骤: 1.下载下面的压缩包并解压下来. http://files.cnblogs.com/files/korykim/ ...
- Sencha Touch 之 Ext.fly方法的使用
Ext.fly方法是Ext.js 4中的flyweight技术,该技术在浏览器中为使用Ext.fly方法的元素节点开辟一块内存,下一次使用Ext.fly方法的元素节点将占据同一块内存,即覆盖前一次的元 ...