Java学习4之抽象类
在面向父类编程的过程中,抽象出来的父类具有一般化特质。父类函数只是一个抽象化的概念,只是为了在面向对象编程时统一接口服务。
example:
有时父类会定义出一些无法实现的行为:
public void call(People people){
peole.speak();
}
此函数面向父类People设计,适合所有的人类使用,但是People的子类没有被定义,People中的speak也无法具体实现。此段代码是一段通用的代码,不能等待所有子类设计完成之后再设计call函数。所以系统需要提供一种机制来定义一种不用实现的函数,这种函数称为抽象函数。
public abstract class People{ //抽象类
public abstract void speak(); //抽象函数
}
抽象函数使用abstract关键字修饰,表达了一种不完整的概念。
只有在子类实现了其中的抽象函数后,构成了一个完整的、具体的类型之后,才能使用。
public class Chinese extends People{
public void speak(){
System.out.println("中国话");
}
public static void main(String[] args){
People people = new Chinese();
people.speak();
}
}
attention:一个抽象类中,至少有一个以上的抽象函数,其中可以混合定义具体的函数。
一个类中如果没有任何抽象元素,它也可以被定义为一个抽象类型。这表示设计者不希望用户直接实例化它,只希望通过子类来实现具体的应用。
对于父类不能完全确定的实现函数,可以使用空实现体。但不建议这样做,因为调用后的执行结果什么也没有,客户可能会觉得困惑。
使用抛出异常来表示此方法没有实现:
public class People{
public void speak() throws IllegalAccessException{
throw new IllegalAccessException("没有实现,不可访问");
}
}
当用户调用此函数,系统会抛出一个异常,这样比一个空实现更友好。
总结:
(1)抽象类可以有构造方法,普通成员变量,非抽象的普通方法,静态方法,静态成员变量。
(2)抽象类中的抽象方法的访问类型可以是public、protected和默认类型。抽象类只能继承一个类。
example:
描述一个简单的树状结构:
import java.util.ArrayList;
import java.util.List;
public abstract class Node{
protected String name;
protected int data;
public abstract Node add(Node child);
}
class ConcreteNode extends Node{
private List<Node>children = new ArrayList<Node>();
public ConcreteNode(String name,int data){
this.name = name;
this.data = data;
}
public Node add(Node child){
children.add(child);
return this;
}
public static void main(Stringp[] args){
Node root = new ConcreteNode("root",0);
Node first = new ConcreteNode("first",0);
root.add(first).add(new ConcreteNode("second",2));
first.add(new ConcreteNode("third",3)).add(new ConcreteNode("fourth",4));
}
}
Java学习4之抽象类的更多相关文章
- java学习面向对象之抽象类
什么是抽象类,之所以说抽象就是具体的反义词喽~抽象离我们最近的距离也就是初中的时候学过的美术课,抽象画派.拿一桶画彩就这么往画布上一泼,那就是抽象.那么java世界当中什么是抽象呢?我们再拿动物还有狗 ...
- Java学习日记-7 抽象类和接口
一.抽象类 abstract修饰:类和类中的方法 抽象方法:abstract type name(parameter-list);(abstract不能修饰static方法和构造函数) 引用:抽象类有 ...
- Java学习笔记之抽象类与接口
抽象类(abstract) 抽象类概述:一个类被abstract修饰表示这个类是抽象类, 自己定义方法但是不实现方法,后代去实现 抽象方法: 一个方法被abstract修饰表示这个方法是抽象方法 ...
- 0026 Java学习笔记-面向对象-抽象类、接口
抽象方法与抽象类 抽象方法用abstract修饰,没有方法体部分,连花括号都不能有: 抽象方法和抽象类都用abstract修饰 包含抽象方法的类一定是抽象类:但不包含抽象方法的类也可以是抽象类 不能创 ...
- [ Java学习基础 ] Java的抽象类与接口
一.抽象类 1. 抽象类 Java语言提供了两种类:一种是具体类:另一种是抽象子类. 2. 抽象类概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ...
- Java 学习(13):抽象类& 抽象方法& 封装
目录 --- 抽象类 --- 封装 抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的 ...
- Java学习笔记之---比较接口与抽象类
Java学习笔记之---比较接口与抽象类 抽象类是描述事物的本质,接口是描述事物的功能 接口与抽象类的异同 1.一个类只能继承一个父类,但是可以有多个接口 2.抽象类中的抽象方法没有方法体,但是可以有 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- 深入理解Java的接口和抽象类(转)
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
随机推荐
- ASP.NET MVC网站学习问题积累(一)
最近工作压力比较大,不得已开始自学C#.同时网站开发业务开展迫在眉睫,只能先从ASP.NET学起.回想一下,连C#和ASP.NET的关系都没有明白,就被赶鸭子上架了...我觉得这将是我工作以来最具有戏 ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- python_71_json序列化1
#序列化:序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程. #本例把字典数据类型存成字符串存在硬盘 #文件只能存字符串和二进制码,字典之类的不可以 info={ ...
- 毛毛虫组【Beta】Scrum Meeting 2
第二天 日期:2019/6/24 前言 第二次会议: 时间:6月24日 地点:教10-503 内容:此次会议主要是进一步完善系统,分配进行文档的准备工作. 1.1 今日完成任务情况以及遇到的问题. 今 ...
- pandas 常用统计方法
统计方法 pandas 对象有一些统计方法.它们大部分都属于约简和汇总统计,用于从 Series 中提取单个值,或从 DataFrame 的行或列中提取一个 Series. 比如 DataFrame. ...
- AngularJS 对象
AngularJS对象就像JavaScript对象 <!DOCTYPE html><html><head><meta http-equiv="Con ...
- Bootstrap历练实例:响应式标签页
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- SpringBoot学习2:springboot整合servlet
整合方式1:通过注解扫描完成 Servlet 组件的注册 1.编写servlet package com.bjsxt.servlet; import javax.servlet.ServletExce ...
- 32-1题:不分行从上到下打印二叉树/BFS/deque/queue
题目 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 考点 1.广度优先遍历 2.binary tree 3.queue 4.deque 思路 按层打印:8.6.10.5.7.9.11 用ST ...
- 3170: [Tjoi2013]松鼠聚会
Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1804 Solved: 968[Submit][Status][Discuss] Descript ...