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语句 * } ...
随机推荐
- OC运行时和方法机制笔记
在OC当中,属性是对字段的一种特殊封装手段. 在编译期,编译器会将对字段的访问替换为内存偏移量,实质是一种硬编码. 如果增加一个字段,那么对象的内存排布就会改变,需要重新编译才行. OC的做法是,把实 ...
- Coroutine,你究竟干了什么?
一 引子 使用Unity已经有一段时间了,对于Component.GameObject之类的概念也算是有所了解,而脚本方面从一开始就选定了C#,目前来看还是挺明智的:Boo太小众,而且支持有限:JS( ...
- 2014百度之星第四题Labyrinth(DP)
Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- php上传图片到server
php文件上传中会用到$_FILES系统函数 一.$_FILES系统函数 PHP编程语言中的常见的$_FILES系统函数使用方法有: $_FILES['myFile']['name'] 显示clien ...
- JavaScript 字符串实用常用操作
字符串截取1. substring()xString.substring(start,end)substring()是最常用到的字符串截取方法,它可以接收两个参数(参数不能为负值),分别是要截取的开始 ...
- html5滑动手势
<div id="divMove" style="height: 100px;"></div> <div id="sli ...
- javascript 全选与反选
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> ...
- MyEclipse中SVN的使用方法
来至转载 -----新浪博客 MyEclipse中的SVN操作手册 1.导入项目 点击工具栏上的[File-Import],进入下图
- 使用VC++通过远程进程注入来实现HOOK指定进程的某个API
前阵子读到一篇关于<HOOK API入门之Hook自己程序的MessageBoxW>的博客,博客地址:http://blog.csdn.net/friendan/article/detai ...
- BST的删除
#include<iostream> #include<math.h> #include<stdio.h> #include<stdlib.h> #in ...