package com.company;

/**
* 抽象类继承
* 用abstract修饰类就是抽象类
* 用abstract修饰方法就是抽象方法(一般使用比较少)
* 抽象类不能被实例化
*/
public class Main {
public static void main(String[] args) {
Animal an = new Cat();
an.cry(); //输出 “猫叫,喵喵喵”
an = new Dog();
an.cry(); //输出 “狗叫,汪汪汪” Cat cat1 = new Cat();
cat1.eat(); //输出 “猫爱吃鱼”
}
} /**
* 定义一个动物抽象类
*/
abstract class Animal {
private int age;
private String name; public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} abstract public void cry();
} /**
* 猫类(继承动物类)
*/
class Cat extends Animal {
/**
* 实现抽象父类中的具体方法
*/
@Override
public void cry() {
System.out.println("猫叫,喵喵喵");
} /**
* 子类自有方法
*/
public void eat() {
System.out.println("猫爱吃鱼");
}
} /**
* 狗类(继承动物类)
*/
class Dog extends Animal {
/**
* 实现抽象父类中的具体方法
*/
@Override
public void cry() {
System.out.println("狗叫,汪汪汪");
}
}

抽象类:

抽象类就是不能使用new方法进行实例化的类(不能被实例化,可以有多个抽象方法),即没有具体实例对象的类,抽象类有点类似于“模板”的作用,目的是根据其格式来创建和修改新的类,对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象,当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract,在抽象类中的成员方法可以包括一般方法和抽象方法

抽象类的关键字:abstract

abstract 关键字,和哪些关键字不能共存?

final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。
private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。
而抽象方法出现的就是需要被复写。
static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了

java中抽象类的特点:

1. 如果一个类中有抽象方法,那么这个类一定是抽象类

2. 抽象类中不一定有抽象方法

3. 抽象类中可以存在抽象方法

4. 抽象类中可以存在构造方法

5. 抽象类中可以存在普通属性、方法、静态属性和静态方法

6. 抽象类中的抽象方法需要有子类实现,如果子类不实现,则子类也需要定义为抽象的

7,抽象方法和抽象类都必须被abstract关键字修饰。

8,抽象类不可以用new创建对象。因为调用抽象方法没意义

9:抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法

接口和抽象类的区别之处:

1. 接口中所有的方法隐含都是抽象的,而抽象类则可以同时包含抽象和非抽象的方法

2. 类可以实现很多个接口,但是只能继承一个抽象类

3. 类可以不实现抽象类和接口声明的所有方法,在这种情况下,类也必须得声明成是抽象的

4. 抽象类可以在不提供接口方法实现的情况下实现接口

5. java接口中声明的变量默认都是final的,抽象类可以包含非final变量

6. java接口中的成员函数默认都是public的,抽象类中的成员函数可以是private,protected或者是public的

7. 接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是如果它包含main方法的话是可以被调用的

8:抽象类中可以有普通方法,接口中不能。
9:抽象类可以有构造,接口不能
10:抽象类中可以有普通字段,而接口中不行
11:抽象类不能实现多继承,接口可以
12:符合isa关系的选用抽象类,符合hasa关系的选用接口比抽象类抽象程度更高

Java基础系列 - 抽象类,子类继承的更多相关文章

  1. Java基础系列 - 抽象类继承和接口实现

    package com.inter; /** * 继承和接口的关系,单继承,多接口 * java不支持多继承,但可通过接口实现多重继承 */ public class test2 { public s ...

  2. 夯实Java基础系列6:一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别!

    目录 抽象类介绍 为什么要用抽象类 一个抽象类小故事 一个抽象类小游戏 接口介绍 接口与类相似点: 接口与类的区别: 接口特性 抽象类和接口的区别 接口的使用: 接口最佳实践:设计模式中的工厂模式 接 ...

  3. 夯实Java基础系列7:一文读懂Java 代码块和执行顺序

    目录 Java中的构造方法 构造方法简介 构造方法实例 例 1 例 2 Java中的几种构造方法详解 普通构造方法 默认构造方法 重载构造方法 java子类构造方法调用父类构造方法 Java中的代码块 ...

  4. 夯实Java基础系列14:深入理解Java枚举类

    目录 初探枚举类 枚举类-语法 枚举类的具体使用 使用枚举类的注意事项 枚举类的实现原理 枚举类实战 实战一无参 实战二有一参 实战三有两参 枚举类总结 枚举 API 总结 参考文章 微信公众号 Ja ...

  5. 夯实Java基础系列7:Java 代码块和执行顺序

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  6. Java基础系列-ArrayList

    原创文章,转载请标注出处:<Java基础系列-ArrayList> 一.概述 ArrayList底层使用的是数组.是List的可变数组实现,这里的可变是针对List而言,而不是底层数组. ...

  7. Java基础九--抽象类

    Java基础九--抽象类 一.抽象类介绍 /*抽象类:抽象:笼统,模糊,看不懂!不具体. 特点:1,方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰. 抽象方法必须定义在抽象类中 ...

  8. Java基础之抽象类与接口

    Java基础之抽象类与接口 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候 ...

  9. 夯实Java基础系列1:Java面向对象三大特性(基础篇)

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 [https://github.com/h2pl/Java-Tutorial](https: ...

随机推荐

  1. RabbitMQ 应用一

    (百度百科)MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息传递指的 ...

  2. SpringMVC源码解读

    1.SpringMVC简介 SpringMVC框架是围绕一个DispatherServlet来设计的.这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射.视图渲染.本地化.时区与主题 ...

  3. VBA Exit For语句

    当想要根据特定标准退出For循环时,就可以使用Exit For语句.当执行Exit For时,控件会立即跳转到For循环之后的下一个语句. 语法 以下是在VBA中Exit For语句的语法. Exit ...

  4. 弹性布局flex 介绍

    摘自:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模 ...

  5. English-培训4-How do you spend your day

  6. node.js 调用mysql 数据库

    1.在package.json中添加mysql依赖 命令:npm install mysql --save 2.项目中添加mysql文件夹 > 文件夹下创建config文件夹,并在config下 ...

  7. 简单使用auth认证实现登录注册

    1 添加路由 //注册 Route::get('/register',"RegisterController@index"); Route::post('/register',&q ...

  8. 【OF框架】使用OF.WinService项目,添加定时服务,进行创建启动停止删除服务操作

    准备 使用框架搭建完成项目,包含OF.WinService项目. 了解Window Service 和定时服务相关知识. 一.添加一个定时服务 第一步:了解项目结构 第二步:创建一个新的Job 第三步 ...

  9. python生成器学习

    python生成器学习: 案例分析一: def demo(): for i in range(4): yield i g=demo() g1=(i for i in g) #(i for i in d ...

  10. STM32 LoRaWAN探索板B-L072Z-LRWAN1中文用户手册

    UM2115用户手册 支持LoRaWAN和 LPWAN协议的STM32L0探索套件 前言 B-L072Z-LRWAN1探索套件采用了 Murata公司的CMWX1ZZABZ-091 LoRa模块.该探 ...